全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1050
推到 Plurk!
推到 Facebook!

关于设计时录入ADOQUERY语句

答題得分者是:cashxin2002
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-08 19:25:33 IP:222.184.xxx.xxx 未訂閱
各位前辈好,我有一段代码如下:在程序编绎与运行时完全正常 ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select 项目类型,Sum(单项累计) from tb_sf where 收费日期 between :Date1 and :Date2')  ADOQuery1.Parameters.ParamByName('Date1').Value := formatdatetime('yy-m-d',DateTimePicker1.Date);   ADOQuery1.Parameters.ParamByName('Date2').Value := formatdatetime('yy-m-d',DateTimePicker2.Date);   ADOQuery1.Open; 现在我改为SQL语句在设计时就录入,SQL中就录入 'select 项目类型,Sum(单项累计) from tb_sf where 收费日期 between :Date1 and :Date2') 然后parameters中填入formatdatetime('yy-m-d',DateTimePicker1.Date); 如图:     为什么将ACTIVE设为TRUE时提示标准表达式中数据类型不匹配,(前辈们注意我问题中的代码如果不在设计时录入,而在运行时执行的话,是没有任何问题的。)
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-09 18:51:00 IP:222.184.xxx.xxx 未訂閱
我的另一段代码,是写在ADOquery属性中SQL里的: select 医生姓名, sum(iif(项目类型 = '西药费',单项累计,0)) as 西药费, sum(iif(项目类型 = '中成药费',单项累计,0)) as 中成药费, sum(iif(项目类型 = '中草药费',单项累计,0)) as 中草药费, sum(单项累计) as total from tb_sf group by 医生姓名 union all select '合計' as 医生姓名, sum(iif(项目类型 = '西药费',单项累计,0)) as 西药费, sum(iif(项目类型 = '中成药费',单项累计,0)) as 中成药费, sum(iif(项目类型 = '中草药费',单项累计,0)) as 中草药费, sum(单项累计) as total from tb_sf 运行也完全正常,哪位高手指点一下,如何在上述代码中插入“收费日期 between :date1 and date2"这个条件,ADOQuery1.Parameters.ParamByName('Date1').Value 这个写在何处?上面的问题其实和我问的这个问题是一个意思
------
我的编程起步于ktop,我将永远支持ktop
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-11 08:54:09 IP:202.62.xxx.xxx 未訂閱
您好﹗
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select 医生姓名, '); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
  ADOQuery1.SQL.Add(' sum(单项累计) as total');
  ADOQuery1.SQL.Add(' from tb_sf group by 医生姓名');
  union all
  ADOQuery1.SQL.Add('select '合計' as 医生姓名, '); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
ADOQuery1.SQL.Add(' sum(单项累计) as total');
  from tb_sf
  ADOQuery1.open;
end;
//SQL原本就是字串形態﹐在字串中包含字串時(如西藥費)﹐需要在此字串左右再各加一個引號
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-11 12:21:26 IP:222.184.xxx.xxx 未訂閱
谢谢cashxin2002大大的指点,加了引号后那问题确实好了,但无法编绎,出错后光标停在union处。后来我干脆把union这一行开始的代码都删除了,结果好编绎了,但执行代码时出错如图:
------
我的编程起步于ktop,我将永远支持ktop
cashxin2002
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-11 15:03:26 IP:202.62.xxx.xxx 未訂閱
您好﹗    試試這樣﹕
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select 医生姓名, '); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
  ADOQuery1.SQL.Add(' sum(单项累计) as total');
  ADOQuery1.SQL.Add(' from tb_sf group by 医生姓名 union ');
  ADOQuery1.SQL.Add('select '合計' as 医生姓名, '); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
  ADOQuery1.SQL.Add(' sum(单项累计) as total from tb_sf');
  ADOQuery1.open;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-11 17:50:43 IP:222.184.xxx.xxx 未訂閱
ADOQuery1.SQL.Add('select '合計' as 医生姓名, '); 这一句在编绎时无法通过,我后来将合计又加了两个引号变成了''合計'',后来编绎就通过了,但运行时还是出现上面的如图错误,我点了OK后,再点步越到下一步,统计结果就正确无误地出来了,一切正常。不知道这个错误错在哪里?我不知道用IIF要不要引用什么单元的? 發表人 - ntjrr 於 2005/07/11 18:19:23
------
我的编程起步于ktop,我将永远支持ktop
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-11 20:34:51 IP:61.155.xxx.xxx 未訂閱
引言: ADOQuery1.SQL.Add('select '合計' as 医生姓名, '); 这一句在编绎时无法通过,我后来将合计又加了两个引号变成了''合計'',后来编绎就通过了,但运行时还是出现上面的如图错误,我点了OK后,再点步越到下一步,统计结果就正确无误地出来了,一切正常。不知道这个错误错在哪里?我不知道用IIF要不要引用什么单元的? 發表人 - ntjrr 於 2005/07/11 18:19:23
我觉得您的SQL语句不完整,虽然出来结果却是容错之后的,原来在Query里的语句为什么要删除呢? union all ADOQuery1.SQL.Add('select '合計' as 医生姓名, '); ADOQuery1.SQL.Add(' sum(iif(项目类型 = '西药费',单项累计,0)) as 西药费,'); ADOQuery1.SQL.Add(' sum(iif(项目类型 = '中成药费',单项累计,0)) as 中成药费,'); ADOQuery1.SQL.Add(' sum(iif(项目类型 = '中草药费',单项累计,0)) as 中草药费,'); ADOQuery1.SQL.Add(' sum(单项累计) as total'); from tb_sf 红色的两句为什么不Add进去? 字符串当然要加引号了。 IIF使用在SQL语句中由数据库引擎执行,不需要use任何单元。 另外,对于日期型参数使用DateTimeToStr转换成字符串加到Where子句中就可以了。 当然也要加引号,最好这样: QuotedStr(DateTimeToStr(Datetimepicker1.Date)) 加进去就好了 Justin Shen
------
====================
我为一切作努力!
Justin Shen

ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-11 21:57:54 IP:222.184.xxx.xxx 未訂閱
前辈,两处红字我加进去的,还是这样的。
------
我的编程起步于ktop,我将永远支持ktop
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-12 09:20:53 IP:218.15.xxx.xxx 未訂閱
插个花:
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select 医生姓名, '); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
  ADOQuery1.SQL.Add(' sum(单项累计) as total');
  ADOQuery1.SQL.Add(' from tb_sf');
  ADOQuery1.SQL.Add(' Where THETIME between:date1 and :date2);
  ADOQuery1.SQL.Add(' group by 医生姓名');
  ADOQuery1.SQL.Add(' union all');
  ADOQuery1.SQL.Add(' select "合計" as 医生姓名,'); 
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,');
  ADOQuery1.SQL.Add(' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,');
  ADOQuery1.SQL.Add(' sum(单项累计) as total');
  ADOQuery1.SQL.Add(' from tb_sf ');
  ADOQuery1.SQL.Add(' Where THETIME between:date1 and :date2);
  ADOQuery1.Parameters.ParamByName('Date1').DataType:=ftDate;//或ftDateTime
  ADOQuery1.Parameters.ParamByName('date1').Value :=DateTimePicker1.datetime;
  ADOQuery1.Parameters.ParamByName('Date2').DataType:=ftDate;//或ftDateTime
ADOQuery1.Parameters.ParamByName('date2').Value :=DateTimePicker2.datetime;
  ADOQuery1.open;
end;
 
试试看吧,注意空格及“”符号。 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-07-12 12:27:38 IP:222.184.xxx.xxx 未訂閱
deity 大大的程式编绎能通过,运行时日期条件也能生效,但合计一行没有数字产生。另外,我上面提到的问题不懂为什么还是存在,我仔细一步一步测试了看一下,运行到ADOQuery1.SQL.Add(' sum(单项累计) as total');能正常通过,运行到  ADOQuery1.SQL.Add(' from tb_sf');就出现了如图错误:    
------
我的编程起步于ktop,我将永远支持ktop
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-07-12 15:38:48 IP:218.15.xxx.xxx 未訂閱
您好: 看了下您以前所提问的问题,发现Fishman 大大在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=74389 中已经给出相应的解答,小弟试了下没什么问题,因没相应的表进行测试,不好意思 或者您可参考下: > ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ 發表人 -
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-07-12 16:39:38 IP:61.155.xxx.xxx 未訂閱
引言: deity 大大的程式编绎能通过,运行时日期条件也能生效,但合计一行没有数字产生。另外,我上面提到的问题不懂为什么还是存在,我仔细一步一步测试了看一下,运行到ADOQuery1.SQL.Add(' sum(单项累计) as total');能正常通过,运行到 ADOQuery1.SQL.Add(' from tb_sf');就出现了如图错误:
您看看我做的源码能不能用,我用了两种方法执行您的Query。 源码:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=74810 Justin Shen ================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 =================================
------
====================
我为一切作努力!
Justin Shen

deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-07-12 18:29:14 IP:218.15.xxx.xxx 未訂閱
ntjrr您好: 1、求不到Total的值,是因为共用同一个参数传值,所以不行。 2、报那个错误信息,疑为字串太长?改为如下这种写法,即可    
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Text:='select 医生姓名,'
          ' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,'
          ' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,'
          ' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,'
          ' sum(单项累计) as total'
          ' from tb_sf'
          ' where (TheDate between :d1 and :d2)'
          ' group by 医生姓名'
          ' union all'
          ' select "合計" as 医生姓名,'
          ' sum(iif(项目类型 = "西药费",单项累计,0)) as 西药费,'
          ' sum(iif(项目类型 = "中成药费",单项累计,0)) as 中成药费,'
          ' sum(iif(项目类型 = "中草药费",单项累计,0)) as 中草药费,'
          ' sum(单项累计) as total'
          ' from tb_sf'
          ' where (TheDate between :d3 and :d4)' ;      ADOQuery2.Parameters.ParamByName('d1').DataType:=ftDate;//或ftDateTime
  ADOQuery2.Parameters.ParamByName('d1').Value :=DateTimePicker1.datetime;
  ADOQuery2.Parameters.ParamByName('d2').DataType:=ftDate;//或ftDateTime
  ADOQuery2.Parameters.ParamByName('d2').Value :=DateTimePicker2.datetime;
  ADOQuery2.Parameters.ParamByName('d3').DataType:=ftDate;//或ftDateTime
  ADOQuery2.Parameters.ParamByName('d3').Value :=DateTimePicker1.datetime;
  ADOQuery2.Parameters.ParamByName('d4').DataType:=ftDate;//或ftDateTime
  ADOQuery2.Parameters.ParamByName('d4').Value :=DateTimePicker2.datetime;
  ADOQuery2.Active:=True;
end;    
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-07-12 22:35:36 IP:222.184.xxx.xxx 未訂閱
JustinShen 大大,非常感谢您能在百忙之中为小弟做了个源程序的实例,但由于不明原因,我无法下载您的程序,有如图错误:     虽然没有下载到您的程序,但我知道您的付出是辛苦的,所以借此留言,表达一下小弟对您的感激之情!
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-07-12 22:46:46 IP:222.184.xxx.xxx 未訂閱
deity 大大,您所说的我在其它版面FISHMAN大大给我的指点是存在的,因为FISHMAN大大想法设法已经解决了我所提出的那个问题,所以我就结了案,这次的问题是那个问题的延续,因为他的查询是在ADOQUERY中的SQL属性中的,当然查询结果完全正常,但我不懂如何写在事件中直接运行,所以才到此再次提问的。您这次为我的问题实在也费了不少心,最终小弟用您的代码解决了我所提出的所有问题,谢谢您的指点。您的代码最终我只变换了一点点 adoquery1.Parameters.ParamByName('d1').Value :=formatdatetime('yy-m-d',DateTimePicker1.Date);如果不这样改的话查询结果不精确,如今天是12号,我收了一个费,如果我查12到12号查不到结果,但查11号到12号就查到了,如果改成我上面那一行代码,不懂怎么的就全部好了。感谢DEITY大大,及本次给小弟指点的各位大大。
------
我的编程起步于ktop,我将永远支持ktop
系統時間:2024-11-22 10:03:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!