好奇怪的问题查询显示问题 |
答題得分者是:cashxin2002
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
查询部份代码如下:
if (CheckBox1.Checked or CheckBox2.Checked or CheckBox3.Checked or checkbox4.Checked or checkbox5.Checked or checkbox6.Checked or checkbox7.Checked or checkbox8.Checked) = False then
Application.MessageBox('至少选择一个查询条件','提示',MB_OK)
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From tb_sf Where 应收金额<>0');
if CheckBox1.Checked then
begin
ADOQuery1.SQL.Add('and 病人姓名='''+edit1.Text+'''');
end;
...........
if CheckBox7.Checked then
begin
ADOQuery1.SQL.Add('and 票据号 between :Number1 and :Number2');
ADOQuery1.Parameters.ParamByName('Number1').Value := StrToInt(Edit5.Text);
ADOQuery1.Parameters.ParamByName('Number2').Value := StrToInt(Edit6.Text);
end;
if CheckBox8.Checked then
begin
ADOQuery1.SQL.Add('and 收费日期 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);
end;
ADOQuery1.Open;
if ADOQUERY1.IsEmpty then
showmessage('没有找到相符的记录'); end;
其它代码
procedure Tsfcxform.ADOQuery1AfterOpen(DataSet: TDataSet);
begin
if not adoquery1.IsEmpty then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text := 'Select Sum(应收金额) From (' + ADOQuery1.SQL.Text + ')';
ADOQuery2.Open;
statusbar1.Panels [0].Text:= '符合查询条件的记录共有'+IntToStr(DBGrid1.DataSource.DataSet.RecordCount)+'条';
// StatusBar1.Panels[1].Text := '合计金额'+FloatToStr(ADOQuery2.Fields[0].Value);
end;
end;
错误现象,如果上述代码中最后一条屏蔽掉的话,一切正常。
如果不屏蔽掉最后一条,在执行 CheckBox1-6(共八个,我只写了三个)时,所有功能正常,在执行第七和第八个查询时出现错误:如图
------
我的编程起步于ktop,我将永远支持ktop |
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 發現您的程式碼中SQL語法部分在末句時少了一個空格,如下:
ADOQuery1.SQL.Add('_and 病人姓名='''+edit1.Text+'''');
//以上紅色下劃線處爲一個空格。
將您的程式碼修改如下:
begin if Not ((CheckBox1.Checked) or (CheckBox2.Checked) or (CheckBox3.Checked) or (checkbox4.Checked) or (checkbox5.Checked) or (checkbox6.Checked) or (checkbox7.Checked) or (checkbox8.Checked)) then Application.MessageBox('至少選擇一個查詢條件','提示',MB_OK) else begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From tb_sf Where 應收金額<>0'); if CheckBox1.Checked then begin ADOQuery1.SQL.Add('_and 病人姓名='''+edit1.Text+''''); //以上紅色下劃線處爲一個空格 end; ........... if CheckBox7.Checked then begin ADOQuery1.SQL.Add('_and 票據號 between :Number1 and :Number2'); //以上紅色下劃線處爲一個空格 ADOQuery1.Parameters.ParamByName('Number1').Value := StrToInt(Edit5.Text); ADOQuery1.Parameters.ParamByName('Number2').Value := StrToInt(Edit6.Text); end; if CheckBox8.Checked then begin ADOQuery1.SQL.Add('_and 收費日期 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); end; ADOQuery1.Open; if ADOQUERY1.IsEmpty then showmessage('沒有找到相符的記錄'); end;另外﹐從錯誤信息來看﹐在程式Run的時候可能有出現Null值的不符合資料表架構(數值類型字段不允許Null值)的現象﹐檢查一下這部分的問題﹒ 供參考! =================================
------
忻晟 |
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 請問您之前說的"如果上述代碼最后一條屏蔽掉的話"﹐是指哪一句﹖如果是StatusBar1.Panels[1].Text := '合计金额'+FloatToStr(ADOQuery2.Fields[0].Value);這句話﹐請檢查在StatusBar1的Panels屬性中﹐是否有存在兩個Panel﹐分別為Panel[0]和Panel[1]﹖如果只有Panel[0]的話﹐再新增一個試試﹒ =================================
------
忻晟 |
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 原來是這樣﹐這是因為您在CheckBox7和CheckBox8的程式碼部分有使用:Number1, :Number2, :Date1, :Date2等變數﹐在使用ADOQuery2的SQL語法時﹐其中的子查詢部分就是ADOQuery1的SQL內容﹐但沒有賦值給以上四個變數﹐增加如下紅色處程式碼即可﹕
procedure Tsfcxform.ADOQuery1AfterOpen(DataSet: TDataSet); begin if not adoquery1.IsEmpty then begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Text := 'Select Sum(应收金额) From (' + ADOQuery1.SQL.Text + ')'; ADOQuery2.Parameters.ParamByName('Number1').Value := StrToInt(Edit5.Text); ADOQuery2.Parameters.ParamByName('Number2').Value := StrToInt(Edit6.Text); ADOQuery2.Parameters.ParamByName('Date1').Value := formatdatetime('yy-m-d',DateTimePicker1.Date); ADOQuery2.Parameters.ParamByName('Date2').Value := formatdatetime('yy-m-d',DateTimePicker2.Date); ADOQuery2.Open; statusbar1.Panels [0].Text:= '符合查询条件的记录共有'+IntToStr(DBGrid1.DataSource.DataSet.RecordCount)+'条'; StatusBar1.Panels[1].Text := '合计金额'+FloatToStr(ADOQuery2.Fields[0].Value); end; end;=================================
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |