刚学delphi不久,小白一枚。
Delphi7中query添加了所有字段,添加sql语句时只搜索显示某些字段,为嘛其它不需要的字段老报错,提示找不到?
是不是添加字段都必须显示的呢?
然后删除到只剩一个字段,能显示了,但搜索的其他字段又看不到了!如何解决?
Delphi7中query添加了所有字段,添加sql语句时只搜索显示某些字段,为嘛其它不需要的字段老报错,提示找不到?
是不是添加字段都必须显示的呢?
然后删除到只剩一个字段,能显示了,但搜索的其他字段又看不到了!如何解决?
解决方案 »
- 动态创建的控件的OnClick过程
- 如何在tmemo控件中﹐控制讓從Tcombobox控件得到值﹐排列成一行而不是多行﹐謝謝﹗
- ClientDataSet中加合计字段ACTIVE设置为TRUE,DBGRID显示不出来?????
- 如何做帮助文件?
- 如何定义一个动态数组(在线等待)
- 谁有好方法解决这个问题?
- 字段相加的问题(菜鸟级),急,在线,立刻给分!
- 我在执行一个exe时怎样使它不显示在windows的任务栏中?
- 请问Assign是什么属性怎么应用的呢。
- 获取打印机的参数?
- 求Delphi XE7下android5.0的补丁
- 如何计算一个浮点型数,可以刚好被已知的N个浮点数,尽量的平均分配完?
你不需要手工添加。将query 内添加的字段,全部删除,就OK了。
select 编号,名称 from 表
那么query的字段中就要有编号,名称这些字段
query1.DatabaseName:=ExtractFilePath(opendialog1.FileName);
if memo1.Text='' then
begin
showmessage('请选择查询文件!') ;
end
else if listbox1.ItemIndex=-1 then
begin
showmessage('请选择查询类别!') ;
end
else if (edit1.Text='') then
begin
showmessage('请输入数值!') ;
end
else if listbox1.Items[listbox1.ItemIndex]='区段限速' then
begin
query1.Fields[5].FieldName:='起点公里标';
query1.Fields[6].FieldName:='终点公里标';
query1.fields[7].Destroy; //此行造成了报错,错误信息:query1:cannot perform this operation on an open dataset.
query1.close;
query1.sql.clear;
query1.sql.add('select JLH 交路号,SXX 行别,XXLX 类别代码,CZM 类别,CZH 车站号,BH 起点公里标,GLB 终点公里标');
query1.sql.add('from '+ExtractFileName(opendialog1.FileName)+'');
query1.sql.add('where xxlx="31" OR (BH=:BH1 and xxlx="83") or (GLB=:BH1 and xxlx="83")'); //查询车站信息或者数值且是区段限速类型
query1.params[0].AsInteger:=strtoint(edit1.text);
query1.prepare;
query1.open;
query1.Filtered:=false;
DBgrid1.Columns[0].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[0].Alignment:=taCenter;//内容居中
DBgrid1.Columns[1].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[1].Alignment:=taCenter;//内容居中
DBgrid1.Columns[2].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[2].Alignment:=taCenter;//内容居中
DBgrid1.Columns[3].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[3].Alignment:=taCenter;//内容居中
DBgrid1.Columns[4].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[4].Alignment:=taCenter;//内容居中
end
end;
procedure TForm1.Button1Click(Sender: TObject);begin
query1.DatabaseName:=ExtractFilePath(opendialog1.FileName);
if memo1.Text='' then
begin
showmessage('请选择查询文件!') ;
end
else if listbox1.ItemIndex=-1 then
begin
showmessage('请选择查询类别!') ;
end
else if (edit1.Text='') then
begin
showmessage('请输入数值!') ;
end
else if listbox1.Items[listbox1.ItemIndex]='区段限速' then
begin
query1.Fields[5].FieldName:='起点公里标';
query1.Fields[6].FieldName:='终点公里标';
query1.fields[7].Destroy; //此行造成了报错,错误信息:query1:cannot perform this operation on an open dataset.
query1.close;
query1.sql.clear;
query1.sql.add('select JLH 交路号,SXX 行别,XXLX 类别代码,CZM 类别,CZH 车站号,BH 起点公里标,GLB 终点公里标');
query1.sql.add('from '+ExtractFileName(opendialog1.FileName)+'');
query1.sql.add('where xxlx="31" OR (BH=:BH1 and xxlx="83") or (GLB=:BH1 and xxlx="83")'); //查询车站信息或者数值且是区段限速类型
query1.params[0].AsInteger:=strtoint(edit1.text);
query1.prepare;
query1.open;
query1.Filtered:=false;
DBgrid1.Columns[0].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[0].Alignment:=taCenter;//内容居中
DBgrid1.Columns[1].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[1].Alignment:=taCenter;//内容居中
DBgrid1.Columns[2].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[2].Alignment:=taCenter;//内容居中
DBgrid1.Columns[3].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[3].Alignment:=taCenter;//内容居中
DBgrid1.Columns[4].Title.Alignment:=taCenter;//标题居中
dbgrid1.Columns[4].Alignment:=taCenter;//内容居中
end
end;目前使用的代码,字段里面添加所有需要查的字段,然后查不同数据的时候删除多余字段,首次点击没问题,能查到。但再次点击就报错。query1.fields[7].Destroy; //此行造成了报错,错误信息:query1:cannot perform this operation on an open dataset.删除多余字段,删除这条语句就没问题,请问如何解决呢?
最简单的方法, 在sql 查询中就处理了。
比如將查询语句写成:select *, case [布尔字段] when 1 then '对' else '错' end as [布尔字段1] from tbl