線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:913
推到 Plurk!
推到 Facebook!

adoquery的一个问题

尚未結案
sunyard
一般會員


發表:9
回覆:10
積分:3
註冊:2004-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-27 15:05:12 IP:202.110.xxx.xxx 未訂閱
请问各位先进: 1)后台access数据库,查询结果正确,recordcount=1; 2)后台informix数据库,查询结果不正确,recordcount=0; 代码如下 procedure TFrmTd.ComboBox1Exit(Sender: TObject); begin showmessage(combobox1.Text); with adoq2 do begin close; sql.clear; sql.add('select * from newjgsx where jgmc=:p1'); parameters.ParamByName('p1').Value:=combobox1.Text; active:=true; open; showmessage(combobox1.Text ' ' inttostr(recordcount)); jgdm:=fieldvalues['jgdm']; showmessage(jgdm); end; end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-28 11:44:45 IP:218.32.xxx.xxx 未訂閱
sunyard 你好:    以前用 BDE, 我師父說..."RecordCount" Property...禁止使用.    你可以仔細看看 "RecordCount" 的相關 Help 說明.
sunyard
一般會員


發表:9
回覆:10
積分:3
註冊:2004-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-31 10:26:12 IP:202.110.xxx.xxx 未訂閱
感谢Mickey: 我的意思并不在于recordcount: 而是, sql.add('select * from newjgsx where jgmc=:p1'); parameters.ParamByName('p1').Value:=combobox1.Text; 比如:Combobox1.Text=‘企业部’;而数据库newjgsx中确实存在 此条记录,为何select不出来?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-31 11:07:33 IP:202.62.xxx.xxx 未訂閱
您好﹗    會不會是因為ComboBox的值錯誤而引起找不到資料﹐比如說前后有空白等等﹒使用如下的方法將jgmc欄位的值加入ComboBox之Items屬性值中﹐再在ComboBox中選擇'企業部'或其它值﹐來重新測試SQL敘述﹒ 重新加入一個ADOQuery(ADOQuery2)﹐在Form的OnActivate事件中﹕
begin
  try
    ADOQuery2.Close;
    ADOQuery2.SQL.Text := 'Select Distinct jgmc From newjgsx';
    ADOQuery2.Open;
    ComboBox1.Items.Clear;
    While Not ADOQuery2.Eof do
      begin
        ComboBox1.Items.Add(ADOQuery2.Fields[0].AsString);
        ADOQuery2.Next;
      end;
  Finally
    ADOQuery2.Close;
  end;
end;
========================= 大病初愈﹐休養調整中... =========================
------
忻晟
sunyard
一般會員


發表:9
回覆:10
積分:3
註冊:2004-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-31 11:49:29 IP:202.110.xxx.xxx 未訂閱
感谢cashxin2002: 源代码如下: procedure TFrmTd.ComboBox1Exit(Sender: TObject); begin showmessage(combobox1.Text); with adoq1 do begin close; sql.clear; sql.add('select * from newjgsx'); sql.add('where jgmc=:p1'); parameters.ParamByName('p1').DataType:=ftstring; parameters.ParamByName('p1').Value:=combobox1.Text; open; showmessage(combobox1.Text ' ' inttostr(recordcount)); jgdm:=fieldvalues['jgdm']; showmessage(jgdm); end; end; procedure TFrmTd.DateTimePicker1Exit(Sender: TObject); begin t1:= Datetimepicker1.Date; end; procedure TFrmTd.DateTimePicker2Exit(Sender: TObject); begin t2:= datetimepicker2.Date; end; procedure TFrmTd.ComboBox1DropDown(Sender: TObject); begin Combobox1.Clear; with ADODataset1 do begin close; commandtext:='select distinct jgmc from newjgsx where jglx=:para1'; parameters.ParamByName('para1').DataType:=ftstring; parameters.ParamByName('para1').Value:='2'; open; while not eof do begin Combobox1.Items.Add(fields[0].asstring); next; end; end; end; 还是无法select到结果,但是我试了一下,如果将数据库中jgmc字段值赋值 为英文字母,则可以select到,汉字则不能成功, 为什么呢?
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-31 23:00:31 IP:218.160.xxx.xxx 未訂閱
引言: 感谢cashxin2002: 源代码如下: procedure TFrmTd.ComboBox1Exit(Sender: TObject); begin showmessage(combobox1.Text); with adoq1 do begin close; sql.clear; sql.add('select * from newjgsx'); sql.add('where jgmc=:p1'); parameters.ParamByName('p1').DataType:=ftstring; parameters.ParamByName('p1').Value:=combobox1.Text; open; showmessage(combobox1.Text ' ' inttostr(recordcount)); jgdm:=fieldvalues['jgdm']; showmessage(jgdm); end; end; procedure TFrmTd.DateTimePicker1Exit(Sender: TObject); begin t1:= Datetimepicker1.Date; end; procedure TFrmTd.DateTimePicker2Exit(Sender: TObject); begin t2:= datetimepicker2.Date; end; procedure TFrmTd.ComboBox1DropDown(Sender: TObject); begin Combobox1.Clear; with ADODataset1 do begin close; commandtext:='select distinct jgmc from newjgsx where jglx=:para1'; parameters.ParamByName('para1').DataType:=ftstring; parameters.ParamByName('para1').Value:='2'; open; while not eof do begin Combobox1.Items.Add(fields[0].asstring); next; end; end; end; 还是无法select到结果,但是我试了一下,如果将数据库中jgmc字段值赋值 为英文字母,则可以select到,汉字则不能成功, 为什么呢?
這一段改成這樣試試看 aa:= combobox1.Text; with adoq1 do begin close; sql.clear; sql.add('select * from newjgsx'); sql.add('where jgmc=''' aa ''' '); open; 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-02 03:00:03 IP:203.204.xxx.xxx 未訂閱
sunyard 你好     會不會Informix與Oracle一樣,對於Char的欄位型態有同樣的行為模式(設為Char(8)時,即使欄位值只有'abc',存到資料庫後會自動補空白到滿8碼),所以在查詢時的條件必須自行補滿8才能查詢得到?    請參考以下連結 【Delphi】【問題】有沒有人遇過降子的情況?  http://delphi.ktop.com.tw/topic.php?topic_id=46106    並檢查jgmc 的欄位型態是否就是Char(n) 呢?可以先改成Varchar(n)試試,就可以確定狀況了。    _______________________________________ 深藍的魚,祝您好運..........連連
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-02 09:55:31 IP:218.163.xxx.xxx 未訂閱
插個花, 經驗談一下: 我所遇到過的是, 繁體中文(BIG5), 有一部份的字, 其第二個Byte是落於128 以下, 而且是重要的辨識字元. (如 "會"字, 其第二個Byte是 $7C="|"), 造成 SQL Server 在解析 SQL 字串時, 結果不同於預期. 應該怪 BIG5 編碼不好吧, 但又能如何解決 ? 後來好像是用 Escape Charcater的宣告來解決, 但只是治標的辦法, 因為, 誰知道還有多少中文字, 會遇到這問題 ?
系統時間:2024-06-29 10:56:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!