問(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è)單引