西西軟件下載最安全的下載網(wǎng)站、值得信賴(lài)的軟件下載站!

首頁(yè)編程開(kāi)發(fā)Delphi → delphi中使用ADOQuery時(shí)的幾個(gè)問(wèn)題解決方案

delphi中使用ADOQuery時(shí)的幾個(gè)問(wèn)題解決方案

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2013/3/14 15:51:12字體大。A-A+

作者:西西點(diǎn)擊:0次評(píng)論:2次標(biāo)簽: ADOQuery

  • 類(lèi)型:系統(tǒng)其它大小:440KB語(yǔ)言:英文 評(píng)分:7.5
  • 標(biāo)簽:
立即下載

問(wèn)題1、文參數(shù)的支持問(wèn)題
今天在使用ClientDataSource查詢(xún)的時(shí)候,“divece_name”參數(shù)賦值為“%筆記本電腦%”,但是使用sql server Profiler跟蹤后發(fā)現(xiàn)查詢(xún)的語(yǔ)句變?yōu)椋?/p>

查詢(xún)的數(shù)據(jù)提交到數(shù)據(jù)庫(kù)時(shí)不完整,當(dāng)我把N'@P1 varchar(8)', '%筆記本%'就可以正常執(zhí)行了

我想可能是數(shù)據(jù)類(lèi)型不正確,于是這么寫(xiě):

cdsEquipment.Close;<br>cdsEquipment.Params.ParamByName('divece_name').DateType := ftWideString;
cdsEquipment.Params.ParamByName('divece_name').Value := '%' + txtDevice.Text + '%';
cdsEquipment.Open;

 但是提交到數(shù)據(jù)庫(kù)的數(shù)據(jù)依然不完整:

最后在中間服務(wù)端的ADOQuery控件的BeforeOpen事件中加入如下代碼就可以了:

adoqEquipment.Parameters.ParamByName('divece_name').Size := Length(adoqEquipment.Parameters.
ParamByName('divece_name').Value);

 重新設(shè)置參數(shù)長(zhǎng)度,據(jù)說(shuō)這是ADOQuery控件的BUG,對(duì)中文參數(shù)的支持問(wèn)題

問(wèn)題2、ADOQuery錯(cuò)誤:ADOQuery1:commandtext does not return a result set
程序內(nèi)容:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into DBhomework values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')');
ADOQuery1.Open;
解決方法:
ADOQuery1.Open; 這行改成 ADOQuery1.ExecSQL;
Select 之類(lèi)的 SQL 語(yǔ)句才用 ADOQuery1.Open;
附:
在select中用open方法,是正確的,但是在insert中代碼能夠執(zhí)行,只是顯示了上面的錯(cuò)誤信息:ADOQuery1:CommandText does not return a result set,后來(lái)才知道ExecSQL方法是執(zhí)行,不會(huì)要求SQL服務(wù)器給一個(gè)返回值,而對(duì)于select則能夠使用open方法,有返回值。

問(wèn)題3、ADOQuery錯(cuò)誤:在此上下問(wèn)中不允許使用名稱(chēng)"張三"。有效表達(dá)式包括常量、常量表達(dá)式和變量(在某些上下文中)。不允許使用列名。
程序內(nèi)容:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into DBhomework(學(xué)號(hào),姓名,性別,手機(jī)號(hào)碼,班級(jí)) values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')');
ADOQuery1.ExecSQL;
其中,“姓名”和“性別”的內(nèi)容是中文。
語(yǔ)法上能夠通過(guò)編譯。SQLserver服務(wù)器里面是確定表內(nèi)屬性的是字符類(lèi)型了,在server2005中也能夠直接插入"張三"。在delphi中,把張三等中文換成數(shù)字或者字母能夠成功插入。
懷疑是ADOQuery組件的問(wèn)題,所以換成ADOCommand組件,程序內(nèi)容如下:
Commandtext:='insert into DBhomework values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')';
Execute;
出現(xiàn)一樣的錯(cuò)誤信息。

解決方法:
'+Edit2.Text+'和'+ComboBox1.Text+'改成'''+Edit2.Text+'''和'''+ComboBox1.Text+'''
其他的'也可以換成'''
附:
錯(cuò)誤原因是:對(duì)于字符串字段屬性沒(méi)有加上引號(hào),一直以為是SQLserver數(shù)據(jù)庫(kù)建表中用的屬性的數(shù)據(jù)類(lèi)型問(wèn)題,后來(lái)又想過(guò)會(huì)不會(huì)是Delphi數(shù)據(jù)類(lèi)型轉(zhuǎn)換問(wèn)題,因?yàn)橹灰斎胫形木蜁?huì)出現(xiàn)問(wèn)題,曾經(jīng)找到答案說(shuō)加上雙引號(hào),試過(guò)了不對(duì),不知道雙引號(hào)在Delphi中是否等價(jià)于兩個(gè)單引

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(2)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)
    推薦文章

    沒(méi)有數(shù)據(jù)