我想查询出来然后修改数据表,可是发生以下错误信息,我不知道怎么办,因为我不会,请高手指点!(50分)

  • 主题发起人 主题发起人 py168
  • 开始时间 开始时间
P

py168

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是错误信息:
project pyinfo.exe raised exception class enoresultset with
message 'error creating cursor handle'. prosess stopped use step or run to continue.
以下是代码:(用高手的行话说是垃圾代码,就将就一下吧,他毕竟是我写出来的)
unit ip_edit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, DBTables, Db;

type
Tip_editForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Button2: TButton;
ComboBox1: TComboBox;
Edit2: TEdit;
Button3: TButton;
ip_editDataSource: TDataSource;
ip_editTable: TTable;
ip_editQuery: TQuery;
DBNavigator1: TDBNavigator;
ip_editupdateQuery: TQuery;
procedure qk;
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
ip_editForm: Tip_editForm;

implementation

{$R *.DFM}
procedure tip_editform.qk;
begin
edit1.Clear;
edit2.clear;
edit3.clear;
edit4.clear;
edit1.setfocus;
end;

procedure Tip_editForm.Button2Click(Sender: TObject);
begin
close;
end;

procedure Tip_editForm.FormActivate(Sender: TObject);
begin
qk;
end;

procedure Tip_editForm.Button3Click(Sender: TObject);

var
p,i,lenofsth:integer;
sqlall,log:string;
arrsth:array[0..3]of string;
function getsth(curredit:tedit):boolean;
begin
result:=false;
if curredit.text<>'' then result:=true;
end;
begin
ip_editdatasource.DataSet:=ip_editquery;
log:='and';
sqlall:='';
if getsth(edit1) then arrsth[1]:='(IP地址='''+edit1.text+''')';
if getsth(edit2) then arrsth[2]:='(使用人='''+edit2.text+''')';
if combobox1.text<>'' then arrsth[3]:='(部门='''+combobox1.text+''')';


for i:=1 to 3 do
begin
arrsth[0]:=arrsth[0]+arrsth;
if arrsth<>'' then sqlall:=sqlall+log+arrsth;
end;
//showmessage(sqlall);
if arrsth[0]='' then
begin
showmessage('查询项目为空,请至少输入一个项目!');
exit;
end;
p:=pos(log,sqlall);
lenofsth:=length(sqlall);
sqlall:=copy(sqlall,p+3,(lenofsth-3));

sqlall:='select * from usingip.db where'+sqlall;

with ip_editquery do

begin
close;
sql.clear;
unprepare;

sql.add(sqlall);
showmessage(sql.text);
prepare;

execsql;
open;
edit1.text:= fieldbyname('IP地址').asstring;
combobox1.text:=fieldbyname('部门').asstring;
edit2.text:=fieldbyname('使用人').asstring;
edit3.text:=fieldbyname('机器型号').asstring;
edit4.text:=fieldbyname('MAC地址').asstring;
edit1.Enabled := false;


end;
end;

procedure Tip_editForm.Button1Click(Sender: TObject);
begin
with ip_editupdatequery do
//其中,ip_editupdatequery 的sql.text='update usingip.db set 部门=:pa_bm,使用人=:pa_syr,机器型号=:pa_jqxh,MAC地址=:pa_mac where IP地址=:pa_ip
'
begin
close;
//sql.clear;
unprepare;

parambyname('pa_ip').asstring:=edit1.text;
parambyname('pa_bm').asstring:=combobox1.text;
parambyname('pa_syr').asstring:=edit2.text;
parambyname('pa_jqxh').asstring:=edit3.text;
parambyname('pa_mac').asstring:=edit4.text;

showmessage(sql.text);
//showmessage(sql.text)的结果是:update usingip.db set 部门=:pa_bm,使用人=:pa_syr,机器型号=:pa_jqxh,MAC地址=:pa_mac where IP地址=:pa_ip
execsql;
open;
edit;
post;
refresh;

end;
end;

end.
 
你最后的execsql以后
open,edit,pos,refresh是用来干啥的?是这几句出错吧?
 
错误提示要你一步步运行程序,不只你发现错误语句在哪儿?


我看下面几句程序好像有问题,不妨看看arrsth[1],arrsth[2],arrsth[3]的内容
if getsth(edit1) then arrsth[1]:='(IP地址='''+edit1.text+''')';
if getsth(edit2) then arrsth[2]:='(使用人='''+edit2.text+''')';
if combobox1.text<>'' then arrsth[3]:='(部门='''+combobox1.text+''')';
 
ip_editupdatequery 的sql语句肯定是一个update语句,对吧。这种语句是不能用
open的,open语句只用在select 语句中.
 
兄弟,你这有点乱呀。
如果是个Update语句,不需要edit和post方法,execsql就完了。
如果是个select语句,呵呵,需要在edit后给字段赋值,再post。
 
单步执行一下吧,看看哪行语句出错了。
 
我看的有点晕,用F8试试吧!
 
后退
顶部