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

首頁編程開發(fā)Delphi → delphi中使用ADOQuery時的幾個問題解決方案

delphi中使用ADOQuery時的幾個問題解決方案

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

作者:西西點擊:0次評論:2次標簽: ADOQuery

  • 類型:系統(tǒng)其它大。440KB語言:英文 評分:7.5
  • 標簽:
立即下載

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

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

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

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

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

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

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

 重新設(shè)置參數(shù)長度,據(jù)說這是ADOQuery控件的BUG,對中文參數(shù)的支持問題

問題2、ADOQuery錯誤: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 之類的 SQL 語句才用 ADOQuery1.Open;
附:
在select中用open方法,是正確的,但是在insert中代碼能夠執(zhí)行,只是顯示了上面的錯誤信息:ADOQuery1:CommandText does not return a result set,后來才知道ExecSQL方法是執(zhí)行,不會要求SQL服務器給一個返回值,而對于select則能夠使用open方法,有返回值。

問題3、ADOQuery錯誤:在此上下問中不允許使用名稱"張三"。有效表達式包括常量、常量表達式和變量(在某些上下文中)。不允許使用列名。
程序內(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.ExecSQL;
其中,“姓名”和“性別”的內(nèi)容是中文。
語法上能夠通過編譯。SQLserver服務器里面是確定表內(nèi)屬性的是字符類型了,在server2005中也能夠直接插入"張三"。在delphi中,把張三等中文換成數(shù)字或者字母能夠成功插入。
懷疑是ADOQuery組件的問題,所以換成ADOCommand組件,程序內(nèi)容如下:
Commandtext:='insert into DBhomework values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')';
Execute;
出現(xiàn)一樣的錯誤信息。

解決方法:
'+Edit2.Text+'和'+ComboBox1.Text+'改成'''+Edit2.Text+'''和'''+ComboBox1.Text+'''
其他的'也可以換成'''
附:
錯誤原因是:對于字符串字段屬性沒有加上引號,一直以為是SQLserver數(shù)據(jù)庫建表中用的屬性的數(shù)據(jù)類型問題,后來又想過會不會是Delphi數(shù)據(jù)類型轉(zhuǎn)換問題,因為只要輸入中文就會出現(xiàn)問題,曾經(jīng)找到答案說加上雙引號,試過了不對,不知道雙引號在Delphi中是否等價于兩個單引

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

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

    沒有數(shù)據(jù)