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

adoquery1.sort时出现“类型出错”

尚未結案
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-11 13:58:30 IP:218.72.xxx.xxx 未訂閱
各位大大: 不好意思,又有问题了,我的table中有filed1(varchr型)和filed2(datetime型),用的是sql server.我用了两个button, button1中是:adotable2.sort:='filed1'; button2中是:adotable2.sort:='filed2'; 我单独使用是好的,但只要在两个button间切换,就会出现“类型出错”的错误,恳请各位大大帮助!谢了! 發表人 - luowy651 於 2004/02/11 19:39:13
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-11 19:21:57 IP:61.164.xxx.xxx 未訂閱
对不起,我刚才有些地方没说清楚,我上面所说的table是指主副明细表中的副表,我只要在主表上有所变化,就会出现“类型不匹配”的错误。但只要我把field2由datetime型convert成char型,就不会出错,只是我转换前的格式是"2001-12-31 10:07:47",转换后变成了类似"Dec 29 2001 11:33AM"这样的格式,而且排序也不对,所以不知该怎么办,求教各位大大了。
Chance36
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-11 20:38:48 IP:211.20.xxx.xxx 未訂閱
引言: 各位大大: 不好意思,又有问题了,我的table中有filed1(varchr型)和filed2(datetime型),用的是sql server.我用了两个button, button1中是:adotable2.sort:='filed1'; button2中是:adotable2.sort:='filed2';
luowy651 你好 button1中改成這樣 adotable2.sort:='';//先清除掉 adotable2.sort:='filed1';//再重新設定 button2中同理 adotable2.sort:=''; adotable2.sort:='filed2'; 祝好運!
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-11 21:16:29 IP:61.164.xxx.xxx 未訂閱
感谢chance36大大,只是如果我在主表table1中上下移动,就会出现“类型不匹配”的错误,主表中datasource1中有如下code: procedure Tform1.DataSource1DataChange(Sender: TObject; Field: TField); begin if (sender as TDatasource).State=dsbrowse then begin if radiobutton1.Checked=true then begin adotable2.active:=false; adotable2.active:=true; adotable2.sort:='';//先清除掉 adotable2.Sort:='spdm ASC'; end else begin adotable2.active:=false; adotable2.active:=true; adotable2.sort:='';//先清除掉 adotable2.Sort:='modifytime DESC'; end; end; end; 在该form中还有两个radiobutton,code如下: procedure Tform.RadioButton1Click(Sender: TObject); begin if radiobutton1.Checked=true then adotable2.sort:='';//先清除掉 adotable2.Sort:='spdm ASC'; end; procedure Tform.RadioButton2Click(Sender: TObject); begin if radiobutton2.Checked=true then adotable2.Sort:=''; adotable2.Sort:='modifytime DESC'; end; 谢谢!
Chance36
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-11 21:34:07 IP:211.20.xxx.xxx 未訂閱
我用D5的AdoTable並沒有Sort屬性?,試試下列程序    procedure Tform1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if (sender as TDatasource).State=dsbrowse then
  begin
    if radiobutton1.Checked=true then
    begin
      adotable2.sort:='';//搬到這兒
      adotable2.active:=false; // 不了解為何要關了再開
      adotable2.active:=true;
      adotable2.Sort:='spdm ASC';
    end
    else begin
      adotable2.sort:='';//搬到這兒
      adotable2.active:=false;
      adotable2.active:=true;
      adotable2.Sort:='modifytime DESC';
    end;
  end;
end;
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-11 22:08:35 IP:61.164.xxx.xxx 未訂閱
chance35大大: 您好!我用的是d6 如果搬到这儿,加上adotable2.sort:=''; 会出现错误"ADOTable2:Cannot perform this operation on a closed datase",另外,我把adotable.active关了再开,主要是如果不这样的话,那么只要在table1主表上移动record,那么在副表table2上就会没有一点显示. 谢谢!
Chance36
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-11 22:40:41 IP:211.20.xxx.xxx 未訂閱
OK 至少我們知道設定adotable2.sort時AdoTable2必須是開啟的 ,嘗試改成下述
procedure Tform1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if (sender as TDatasource).State=dsbrowse then
  begin
    if radiobutton1.Checked=true then
    begin
      If adoTable2.Active Then Begin
        adotable2.sort:='';//
        adotable2.active:=false; // 
      End;
      adotable2.active:=true;
      adotable2.Sort:='spdm ASC';
    end
    else begin
      If adoTable2.Active Then Begin
        adotable2.sort:='';//
        adotable2.active:=false; // 
      End;
      adotable2.active:=true;
      adotable2.Sort:='modifytime DESC';
    end;
  end;
end;    
ps:以我片斷了解,似乎程式架構有點奇怪,為何會在DataSource1DataChange事件中作這些事呢?而不是在adotable1的AfterScroll事件中。唉!離題太遠了,或許你有你的考量吧。
luowy651
高階會員


發表:257
回覆:313
積分:114
註冊:2003-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-12 22:32:41 IP:61.164.xxx.xxx 未訂閱
引言: ps:以我片斷了解,似乎程式架構有點奇怪,為何會在DataSource1DataChange事件中作這些事呢?而不是在adotable1的AfterScroll事件中。唉!離題太遠了,或許你有你的考量吧。
您好,感谢您的ps,确实只要在afterscroll事件中就可实现了. 经过努力,我已把问题解决了,但没再用.sort,而是使用了adoquery的动态查询功能来实现主副明细表的方法.贴上code,以供参考: procedure Tfmsjcx.ADOTable1AfterScroll(DataSet: TDataSet); VAR X:STRING; begin if radiobutton1.Checked=true then begin X:=TRIM(adotable1.fieldbyname('field').asstring); adoquery1.ACTIVE:=FALSE; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('SELECT *'); adoquery1.sql.add('FROM table'); adoquery1.sql.add('WHERE field='); adoquery1.sql.add('''' X ''''); adoquery1.sql.add('order by spdm ASC'); adoquery1.ACTIVE:=TRUE; end else begin X:=TRIM(adotable1.fieldbyname('field').asstring); adoquery1.ACTIVE:=FALSE; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('SELECT *'); adoquery1.sql.add('FROM table'); adoquery1.sql.add('WHERE field='); adoquery1.sql.add('''' X ''''); adoquery1.sql.add('order by modifytime DESC'); adoquery1.ACTIVE:=TRUE; end; end; 發表人 - luowy651 於 2004/02/12 22:39:24
系統時間:2024-11-23 11:41:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!