chechy师父,偶今天一晚上的代码,总是不行 系统说:type mismatch in exprition
偶的代码: procedure Tf_yhgl.Button1Click(Sender: TObject); var newnode:ttreenode; begin if treeview1.selected.text= '超级用户 ' then begin newnode:=treeview1.items.addchild(treeview1.selected, 'newname '); newnode.imageindex:=0; newnode.selectedindex:=0;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag=0 '); data.qu_yhgl1.open;
data.qu_yhgl2.close; data.qu_yhgl2.sql.clear; data.qu_yhgl2.SQL.add( 'select * from pass '); data.qu_yhgl2.open;
if data.qu_yhgl1.recordcount=1 then begin count1:=strtoint(data.qu_yhgl2.fieldbyname( 'id ').asstring); newname:= '管理员 '+inttostr(count2); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.fieldbyname( 'name ').asstring:=edit1.text; data.qu_yhgl3.fieldbyname( 'passwd ').asstring:=edit2.text; data.qu_yhgl3.fieldbyname( 'qx ').asstring:= '111111111 '; data.qu_yhgl3.fieldbyname( 'alias ').asstring:= 'newname '; data.qu_yhgl3.fieldbyname( 'issuper ').asstring:= 'y '; data.qu_yhgl3.fieldbyname( 'flag ').asstring:= '1 '; data.qu_yhgl3.execsql; edit1.text:= 'name '+inttostr(count1); edit2.text:= 'passwd '+inttostr(count1); end; if data.qu_yhgl1.recordcount=0 then begin count2:=data.qu_yhgl2.recordcount+1; newname:= '管理员 '+inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (field1,field2,field3,field4,field5,field6,field7) values (value1,value2,value3,value4,value5,value6,value7) '); data.qu_yhgl4.parambyname( 'field1 ').value:= 'count1 '; data.qu_yhgl4.parambyname( 'field2 ').value:=edit1.text; data.qu_yhgl4.parambyname( 'field3 ').asstring:=edit2.text; data.qu_yhgl4.parambyname( 'field4 ').asstring:= '111111111 '; data.qu_yhgl4.parambyname( 'field5 ').asstring:= 'newname '; data.qu_yhgl4.parambyname( 'field6 ').asstring:= 'y '; data.qu_yhgl4.parambyname( 'field7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text:= 'name '+inttostr(count2); edit2.text:= 'passwd '+inttostr(count2); end; end; end;
偶的数据库: id name passwd qx alias issuper flag
偶实在找不出虫了
|
| |
|
|
#6楼 得分:0回复于:2001-10-03 08:45:09
错的一塌糊涂。我真服了你了。 在写程序的时候,要多查在线帮助,它对你帮助更大。 begin if data.qu_yhgl1.recordcount = 1 then begin count1 := strtoint(data.qu_yhgl2.fieldbyname( 'id ').asstring); newname := '管理员 ' + inttostr(count2); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.ParamByName( 'name ').asstring := edit1.text; data.qu_yhgl3.ParamByName( 'passwd ').asstring := edit2.text; data.qu_yhgl3.ParamByName( 'qx ').asstring := '111111111 '; data.qu_yhgl3.ParamByName( 'alias ').asstring := 'newname '; data.qu_yhgl3.ParamByName( 'issuper ').asstring := 'y '; data.qu_yhgl3.ParamByName( 'flag ').asstring := '1 '; data.qu_yhgl3.execsql; edit1.text := 'name ' + inttostr(count1); edit2.text := 'passwd ' + inttostr(count1); end; if data.qu_yhgl1.recordcount = 0 then begin count2 := data.qu_yhgl2.recordcount + 1; newname := '管理员 ' + inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6) '); data.qu_yhgl4.parambyname( 'value1 ').asstring := 'count1 '; data.qu_yhgl4.parambyname( 'value2 ').asstring := edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring := edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring := '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring := 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring := 'y '; //data.qu_yhgl4.parambyname( 'field7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text := 'name ' + inttostr(count2); edit2.text := 'passwd ' + inttostr(count2); end; end;
|
| |
|
|
#7楼 得分:0回复于:2001-10-03 10:36:30
chechy师父,这一句,是什么意思 //data.qu_yhgl4.parambyname( 'field7 ').asstring:= '1 '; 另外系统仍然说 typs mismatch…… |
| |
|
|
#8楼 得分:0回复于:2001-10-03 10:40:23
我的程序只是一个示例,实际上需要改写的,呵呵希望你能明白程序。 我上一句是注释,实际上,你观察一下,SQL语句只有6个参数,不是7个。所以我注释了一句。 另外,我觉得我的程序,每个参数对应的数据是错位的。 |
| |
|
|
#9楼 得分:0回复于:2001-10-03 10:42:37
你的错误实在太CHILDISH SQL中根本就没有field7参数 你为它赋值根本不就行 所以必须去掉这句 还有你仔细检查一下value 和insert 中的字段的结应关系 确实有错误
|
| |
|
|
#10楼 得分:0回复于:2001-10-03 10:48:49
偶注意了一下,但仍然不得通过, 不知道是不是逻辑错误?
procedure Tf_yhgl.Button1Click(Sender: TObject); var newnode:ttreenode; begin if treeview1.selected.text= '超级用户 ' then begin newnode:=treeview1.items.addchild(treeview1.selected,newname); newnode.imageindex:=0; newnode.selectedindex:=0;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag=0 '); data.qu_yhgl1.open;
data.qu_yhgl2.close; data.qu_yhgl2.sql.clear; data.qu_yhgl2.SQL.add( 'select * from pass '); data.qu_yhgl2.open;
if data.qu_yhgl1.recordcount=1 then begin count1:=strtoint(data.qu_yhgl1.fieldbyname( 'id ').asstring); newname:= '管理员 '+inttostr(count1); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.parambyname( 'name ').asstring:=edit1.text; data.qu_yhgl3.parambyname( 'passwd ').asstring:=edit2.text; data.qu_yhgl3.parambyname( 'qx ').asstring:= '111111111 '; data.qu_yhgl3.parambyname( 'alias ').asstring:= 'newname '; data.qu_yhgl3.parambyname( 'issuper ').asstring:= 'y '; data.qu_yhgl3.parambyname( 'flag ').asstring:= '1 '; data.qu_yhgl3.execsql; edit1.text:= 'name '+inttostr(count1); edit2.text:= 'passwd '+inttostr(count1); end; if data.qu_yhgl1.recordcount=0 then begin count2:=data.qu_yhgl2.recordcount+1; newname:= '管理员 '+inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (field1,field2,field3,field4,field5,field6,field7) values (value1,value2,value3,value4,value5,value6,value7) '); data.qu_yhgl4.parambyname( 'value1 ').asstring:= 'count1 '; data.qu_yhgl4.parambyname( 'value2 ').asstring:=edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring:=edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring:= '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring:= 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring:= 'y '; data.qu_yhgl4.parambyname( 'value7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text:= 'name '+inttostr(count2); edit2.text:= 'passwd '+inttostr(count2); end; end; end;
|
| |
|
|
#11楼 得分:0回复于:2001-10-03 10:51:15
这写错了 data.qu_yhgl4.parambyname( 'value1 ').asstring:= 'count1 '; count1应为count2,该了,仍type……
|
| |
|
|
#12楼 得分:0回复于:2001-10-03 10:51:57
insert的SQL语句压根就是错误的。你的PASS表难道字段名叫field1,field2,field3,field4,field5,field6,field7
|
| |
|
|
#13楼 得分:0回复于:2001-10-03 10:52:48
是时候清一下了。 data.qu_yhgl4.params.clear;
|
| |
|
|
#14楼 得分:0回复于:2001-10-03 10:53:43
count2:=data.qu_yhgl2.fieldbyname( 'id ').asinteger;直接这样就可以了
|
| |
|
|
#15楼 得分:0回复于:2001-10-03 11:03:57
chechy,偶又错了 xzfyes(dfsf), data.qu_yhgl4.params.clear; 怎么回事?愿闻详情 yxjjx(孤行者) ,count2是整形,由于数据库为空,或者 没有空闲的地方(flag=0),需要+1的
|
| |
|
|
#16楼 得分:0回复于:2001-10-03 11:15:34
chechy,偶要跳楼了,type…… 是不是这里错了 count2:=data.qu_yhgl2.recordcount+1; 两侧类型不对
|
| |
|
|
#17楼 得分:0回复于:2001-10-03 11:18:13
count2:=data.qu_yhgl2.recordcount+1没错 你的设计思路确有问题 一定要简化设计 能不用SQL最好别用 因为SQL和EDIT与POST 比起来是较慢的 也不要乱猜 最好看看运行出错在什么地方 照提示应该是SQL出错 |
| |
|
|
#18楼 得分:0回复于:2001-10-03 11:27:21
老鱼,运行时,报错说type mismatch in exprition 偶设断点都用不上 偶觉得思路没有问题 而且所有情况都考虑了 |
| |
|
|
#19楼 得分:0回复于:2001-10-03 11:28:32
我也要晕倒了。 拜托多东东脑子啊! data.qu_yhgl4.parambyname( 'value1 ').AsInteger:=count2; |
| |
|
|
#20楼 得分:0回复于:2001-10-03 11:30:01
|
|
|
#21楼 得分:0回复于:2001-10-03 11:31:13
好了,好了,你来慢慢解释吧。 在这样下去,我要倒了。 |
| |
|
|
#22楼 得分:0回复于:2001-10-03 11:31:45
同意CHECHY 我也要晕菜了 这么大的一篇代码 只实现一段不可思议的功能 |
| |
|
|
#23楼 得分:0回复于:2001-10-03 11:37:12
别,各位师父, 偶跳楼也得等到成功了 老千 这是按照昨天老p教的所写的 逻辑有误吗
|
| |
|
|
#24楼 得分:0回复于:2001-10-03 11:39:57
我来解释一下吧!!呵呵~~
就是首先从数据库中查询没有使用或者是已经删除了的用户ID号码! 如果有~则新增加的用户就使用这个ID号码~ 如果没有~则新增加的用户的ID号码就取数据库总数+1~~ 然后就是对于密码的一些操作~~ |
| |
|
|
#25楼 得分:0回复于:2001-10-03 11:40:19
|
|
|
#26楼 得分:0回复于:2001-10-03 11:40:55
|
|
|
#27楼 得分:0回复于:2001-10-03 11:41:57
那你帮他写一下insert的SQL语句吧。很容易的。 |
| |
|
|
#28楼 得分:0回复于:2001-10-03 11:43:44
|
|
|
#29楼 得分:0回复于:2001-10-03 11:44:24
Focus(老鱼) (2001-10-3 11:18:13) 得0分 ........... 能不用SQL最好别用 ..........
这句话什么意思?
|
| |
|
|
#30楼 得分:0回复于:2001-10-03 11:44:52
|
|
|
#31楼 得分:0回复于:2001-10-03 11:45:19
就是这段代码,错的一塌糊涂。我就想不通,为什么学东西不能活学活用,非要死板硬套?
data.qu_yhgl4.SQL.add( 'insert into pass (field1,field2,field3,field4,field5,field6,field7) values (value1,value2,value3,value4,value5,value6,value7) '); data.qu_yhgl4.parambyname( 'value1 ').asstring:= 'count1 '; data.qu_yhgl4.parambyname( 'value2 ').asstring:=edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring:=edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring:= '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring:= 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring:= 'y '; data.qu_yhgl4.parambyname( 'value7 ').asstring:= '1 ';
|
| |
|
|
#32楼 得分:0回复于:2001-10-03 11:47:01
to progame(呵呵呵(傻笑中。。。) 因为sql是比较慢的 |
| |
|
|
#33楼 得分:0回复于:2001-10-03 11:47:23
呵呵~~ data.qu_yhgl4.SQL.add( 'insert into pass (field1,field2,field3,field4,field5,field6,field7) values (value1,value2,value3,value4,value5,value6,value7) ');
语句里面那有参数呀??????????? |
| |
|
|
#34楼 得分:0回复于:2001-10-03 11:48:48
|
|
|
#35楼 得分:0回复于:2001-10-03 11:49:20
是啊,我这么写的。但是我不知道表结构,和程序逻辑,胡写。好像参数有些对不牢。 data.qu_yhgl4.SQL.add( 'insert into pass (name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6) '); data.qu_yhgl4.parambyname( 'value1 ').asstring := 'count1 '; data.qu_yhgl4.parambyname( 'value2 ').asstring := edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring := edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring := '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring := 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring := 'y '; //data.qu_yhgl4.parambyname( 'field7 ').asstring:= '1 ';
|
| |
|
|
#36楼 得分:0回复于:2001-10-03 11:49:41
Focus(老鱼): SQL比较慢? 我在VB中直接使用ADO的Connection或command执行SQL语句是最快的 其速度和在查询分析器中执行是一样的,只是多了传输语句的时间罢了 搞不懂Delphi:( |
| |
|
|
#37楼 得分:0回复于:2001-10-03 11:51:34
To progame: Delphi写数据库很容易,当然简单的方法你不一定知道。 To Focus: 需要指出的是,Delphi向数据库提交数据都是用SQL,无论你用TTable、TQuery。无论你是否真的写了SQL。Delphi最终向数据库提交都是靠insert,update,delete三条SQL语句。 |
| |
|
|
#38楼 得分:0回复于:2001-10-03 11:52:30
TO:progame(呵呵呵(傻笑中。。。) ~~
呵呵~~其实写一些存储过程可以更快的~~~ |
| |
|
|
#39楼 得分:0回复于:2001-10-03 11:52:42
dim str as string str= "insert into pass (name,passwd,qx.alinas,issuper,flag) values ( ' " _ & "count1 ', ' " & edit1.text & " ', ' " & edit2.text & " ', '11111111 ', 'newname ' " _ & ", 'y ', '1 ') " ado.connection.execute str
这就是VB的ADO做法了,仅供参考:) |
| |
|
|
#40楼 得分:0回复于:2001-10-03 11:53:06
我以前曾试过SQL的速度 小批的数据速度不相上下 但大批的绝对是SQL 比edit&post&next慢 主要可能是没有缓冲的缘故 |
| |
|
|
#41楼 得分:0回复于:2001-10-03 11:53:35
偶的数据库表是这样的 id name passwd qx alias issuper flag
|
| |
|
|
#42楼 得分:0回复于:2001-10-03 11:53:59
TO:chechy(chechy) ~~我也不了解他现在的表是什么样子~~呵呵~~已经被修改的面目全非了~~
TO:老牛!!麻烦给我们你的那个Pass表的结构以及字段的解释~~~~ |
| |
|
|
#43楼 得分:0回复于:2001-10-03 11:55:13
千两:对于一条insert来说,用存储过程意义不大的,而且传递参数麻烦
我用存储过程只是在大数据量操作时才用的
|
| |
|
|
#44楼 得分:0回复于:2001-10-03 11:56:45
|
|
|
#45楼 得分:0回复于:2001-10-03 11:57:21
To progame 你不觉得VB的字符串处理很笨拙吗? To Focus 如果你有兴趣用SQL MONITOR跟踪,你会知道,即使使用Post语句,Delphi也是用SQL语句对数据库进行提交。 |
| |
|
|
#46楼 得分:0回复于:2001-10-03 11:57:49
需要声明的是 老牛用的是PARADOX 不支持存储过程和高级SQL |
| |
|
|
#47楼 得分:0回复于:2001-10-03 11:57:56
id 纪录数 name passwd qx:权限字符串 alias:treeview上的text issuper:超级用户 flag:纪录可用标志
偶现在的代码: procedure Tf_yhgl.Button1Click(Sender: TObject); var newnode:ttreenode; begin if treeview1.selected.text= '超级用户 ' then begin newnode:=treeview1.items.addchild(treeview1.selected,newname); newnode.imageindex:=0; newnode.selectedindex:=0;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag=0 '); data.qu_yhgl1.open;
data.qu_yhgl2.close; data.qu_yhgl2.sql.clear; data.qu_yhgl2.SQL.add( 'select * from pass '); data.qu_yhgl2.open;
if data.qu_yhgl1.recordcount=1 then begin count1:=strtoint(data.qu_yhgl1.fieldbyname( 'id ').asstring); newname:= '管理员 '+inttostr(count1); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.parambyname( 'name ').asstring:=edit1.text; data.qu_yhgl3.parambyname( 'passwd ').asstring:=edit2.text; data.qu_yhgl3.parambyname( 'qx ').asstring:= '111111111 '; data.qu_yhgl3.parambyname( 'alias ').asstring:= 'newname '; data.qu_yhgl3.parambyname( 'issuper ').asstring:= 'y '; data.qu_yhgl3.parambyname( 'flag ').asstring:= '1 '; data.qu_yhgl3.execsql; edit1.text:= 'name '+inttostr(count1); edit2.text:= 'passwd '+inttostr(count1); end; if data.qu_yhgl1.recordcount=0 then begin count2:=data.qu_yhgl2.recordcount+1; newname:= '管理员 '+inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (value1,value2,value3,value4,value5,value6,value7) '); data.qu_yhgl4.parambyname( 'value1 ').asinteger:=count2; data.qu_yhgl4.parambyname( 'value2 ').asstring:=edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring:=edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring:= '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring:= 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring:= 'y '; data.qu_yhgl4.parambyname( 'value7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text:= 'name '+inttostr(count2); edit2.text:= 'passwd '+inttostr(count2); end; end; end;
|
| |
|
|
#48楼 得分:0回复于:2001-10-03 11:58:58
data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag)values ( '+IntToStr(Count1)+ ', '+#39+Edit1.Text+#39+ ', '+#39+Edit2.Text+#39+ ', ' ' '111111111 ' ' ', ' ' 'newname ' ' ', ' ' ' 'y ' ' ', ' ' '1 ' ' ') ');
看看是不是呀~~呵呵~~
老牛!!字段的类型都是什么的??String?? |
| |
|
|
#49楼 得分:0回复于:2001-10-03 11:59:11
begin if data.qu_yhgl1.recordcount = 1 then begin count1 := strtoint(data.qu_yhgl2.fieldbyname( 'id ').asstring); newname := '管理员 ' + inttostr(count2); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.ParamByName( 'name ').asstring := edit1.text; data.qu_yhgl3.ParamByName( 'passwd ').asstring := edit2.text; data.qu_yhgl3.ParamByName( 'qx ').asstring := '111111111 '; data.qu_yhgl3.ParamByName( 'alias ').asstring := 'newname '; data.qu_yhgl3.ParamByName( 'issuper ').asstring := 'y '; data.qu_yhgl3.ParamByName( 'flag ').asstring := '1 '; data.qu_yhgl3.execsql; edit1.text := 'name ' + inttostr(count1); edit2.text := 'passwd ' + inttostr(count1); end; if data.qu_yhgl1.recordcount = 0 then begin count2 := data.qu_yhgl2.recordcount + 1; newname := '管理员 ' + inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6,:value7) '); data.qu_yhgl4.parambyname( 'value1 ').asInteger := count2; data.qu_yhgl4.parambyname( 'value2 ').asstring := edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring := edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring := '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring := 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring := 'y '; data.qu_yhgl4.parambyname( 'field7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text := 'name ' + inttostr(count2); edit2.text := 'passwd ' + inttostr(count2); end;
|
| |
|
|
#50楼 得分:0回复于:2001-10-03 11:59:17
Focus(老鱼):大批的指的是什么?一次更改影响多个记录吗? 那样的话也快呀,如果是多个操作可以这样写,是一样的: str= "insert ...... " str=str & " update ..... " str=str & " delete ..... " .......
一次性执行:execute str
这样速度还是很快,不会去多次建立连接和Open |
| |
|
|
#51楼 得分:0回复于:2001-10-03 12:00:15
呵呵~~~我的意思就是适当的时候写存储过程的~~
大家好!!呵呵~~不要在跑题了!!:) |
| |
|
|
#52楼 得分:0回复于:2001-10-03 12:01:01
chechy(chechy):你说的字符串操作指哪此方面? |
| |
|
|
#53楼 得分:0回复于:2001-10-03 12:01:28
啊呀 从未用过SQLMONITOR 我一直以为这是监视大型SQL数据数据库的执行情况 说起来 好多的DELPHI自带工具我都没仔细研究过 看来得好好看一下
|
| |
|
|
#54楼 得分:0回复于:2001-10-03 12:01:31
|
|
|
#55楼 得分:0回复于:2001-10-03 12:02:56
|
|
|
#56楼 得分:0回复于:2001-10-03 12:03:00
数据库字段都是string的 报错:type mismatch in expition |
| |
|
|
#57楼 得分:0回复于:2001-10-03 12:04:36
老牛!!你现在有两个SQL语句~~ 是第一个报错~~还是第二个报错呢?? |
| |
|
|
#58楼 得分:0回复于:2001-10-03 12:07:50
系统连偶指的断点都不让偶测试,无法知道哪个sql出了问题 |
| |
|
|
#59楼 得分:0回复于:2001-10-03 12:08:29
To Focus,你需要好好研究一下,悟透Delphi对数据库的操作很有好处。 To progame,VB写SQL语句够烦琐的。实际上,我写Delphi程序,很少写SQL,我让Delphi替我生成,我为什么要写? To tikkypeng,我刚用Delphi编程的时候用存储过程,现在不用了。 |
| |
|
|
#60楼 得分:0回复于:2001-10-03 12:09:33
|
|
|
#61楼 得分:0回复于:2001-10-03 12:13:17
chechy(chechy):VB写SQL语句不烦琐的 如果不用存储过程在大型MIS中是无法想像的 牛虻:你能不能把id设为长整型啊 |
| |
|
|
#62楼 得分:0回复于:2001-10-03 12:13:25
偶好象侦察出来 if data.qu_yhgl1.recordcount = 0 then if data.qu_yhgl1.recordcount = 1 then
这两个的recordcount都是inaccessble value 好像都没得到执行
|
| |
|
|
#63楼 得分:0回复于:2001-10-03 12:13:36
TO:chechy(chechy)~~呵呵~~其实我一直没有用过存储过程~~看了别人的一个程序以后~~觉得不错~~以后准备用一些~~~因为现在有一些很大的操作全都是SQL执行~~ |
| |
|
|
#64楼 得分:0回复于:2001-10-03 12:16:49
是不是数据库为空时,没有min(id)?或不允许用min(id) |
| |
|
|
#65楼 得分:0回复于:2001-10-03 12:17:33
存储过程不仅仅是速度上的极大提高,而且对于维护会带来很大的方便
因为这就是一个封装的对象,并提供了相关的接口
还有视图和触发器,都是一个个对象,反正我是这样理解的:) |
| |
|
|
#66楼 得分:0回复于:2001-10-03 12:18:00
|
|
|
#67楼 得分:0回复于:2001-10-03 12:22:02
见鬼了, 究竟问题在哪里呢? bug没了, 逻辑没错误, 寝食难安…… |
| |
|
|
#68楼 得分:0回复于:2001-10-03 12:22:38
to:chechy(chechy) 你的建议我虚心接受 不过有一点不同意见 DELPHI对数据库的操作是底层的东西 我觉得只要了解了如何使用好它包装了的东西就可以 不必非得打破砂底问到底 是吗? 如果非得打破 那不如用VC 一点浅见请不要见笑
|
| |
|
|
#69楼 得分:0回复于:2001-10-03 12:22:45
|
|
-
- say
- (㊣為人㊣)
- 等 级:
|
#70楼 得分:0回复于:2001-10-03 12:26:01
|
|
|
#71楼 得分:0回复于:2001-10-03 12:28:09
是不是id的问题? 偶的id是string count1,2为integer |
| |
|
|
#72楼 得分:0回复于:2001-10-03 12:29:51
To progame:存储过程有什么好的,实际上存储过程做的程序都能做。所以,我写MIS程序,最多就用5个存储过程(调用一些特殊操作)。 To Focus:我没有教你看BDE的底层,没有意思。我的意思是,你需要理解为什么TQuery比TTable效率高?为什么我说Delphi向数据库提交数据都是用SQL?理解了这些,我想对提高你的水平很有好处。也许你误解了我的意思,或者我没有表达清楚。 |
| |
|
|
#73楼 得分:0回复于:2001-10-03 12:30:26
|
|
|
#74楼 得分:0回复于:2001-10-03 12:32:23
整型、字符型,我认为没有区别。 chris2019(牛虻---牛角挂书版),你用了我最后给你的程序吗?报什么错,在什么地方报错?会用SQL Monitor吗? |
| |
|
|
#75楼 得分:0回复于:2001-10-03 12:33:06
chechy(chechy):可以举一个例子,我现在进行结账,我只用存储过程来实现
而传递的参数只是所要结账的月份,如果日后来维护,我只需改动此存储过程
而且对于存储过程,它是启动了事务的,要么全部成功,要么全部不算
这就是存储过程的好处,反正我喜欢用,这对于模块化思想亦有好处 |
| |
|
|
#76楼 得分:0回复于:2001-10-03 12:34:13
|
|
|
#77楼 得分:0回复于:2001-10-03 12:35:47
|
|
|
#78楼 得分:0回复于:2001-10-03 12:36:24
老牛~~给一个最新的代码部分~~然后说出错误在那里~~ |
| |
|
|
#79楼 得分:0回复于:2001-10-03 12:38:05
我不用储存过程的理由是:1、移植性差;2、调试性差。 你说的好处,我不否认。 |
| |
|
|
#80楼 得分:0回复于:2001-10-03 12:39:16
存储过程的缺点确实比较讨厌的~~
不过号称SQLServer2000支持调试~~~~ |
| |
|
|
#81楼 得分:0回复于:2001-10-03 12:39:24
数据库编程其实主要是数据库的事情而不是程序的事情 所以在其它方面VB比Delphi弱,因为对于底层的东西操作起来困难 但在数据库方面,绝对不比Delphi差 其实现在大型数据库本身就是一个开发平台 |
| |
|
|
#82楼 得分:0回复于:2001-10-03 12:39:41
|
|
|
#83楼 得分:0回复于:2001-10-03 12:40:55
千两: 我会在查询分析器中执行相关存储过程中的语句 然后再写入存储过程,而相关参数则通过声明变量来实现
|
| |
|
|
#84楼 得分:0回复于:2001-10-03 12:41:58
chechy 师父,已经用了,仍然type…… 偶觉得应该一步一步分析 首先确定逻辑有没有问题 偶的treeview 超级用户 管理员 ……
上面的代码是 新建 按钮下的响应事件 即 当选中 超级用户 click时, 新建一个管理员 新建时,新建的用户写入数据库 ……
|
| |
|
|
#85楼 得分:0回复于:2001-10-03 12:42:09
还有面向对象特性差(VB.NET除外)。所以不能设计出抽象模型。 没有抽象模型,代码的重用性,扩展性无从谈起。 当然,很多写Delphi程序的人也不用面向对象特性。 |
| |
|
|
#86楼 得分:0回复于:2001-10-03 12:44:32
最新代码: procedure Tf_yhgl.Button1Click(Sender: TObject); var newnode:ttreenode; begin if treeview1.selected.text= '超级用户 ' then begin newnode:=treeview1.items.addchild(treeview1.selected,newname); newnode.imageindex:=0; newnode.selectedindex:=0;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag=0 '); data.qu_yhgl1.open;
data.qu_yhgl2.close; data.qu_yhgl2.sql.clear; data.qu_yhgl2.SQL.add( 'select * from pass '); data.qu_yhgl2.open;
if data.qu_yhgl1.recordcount=1 then begin count1:=strtoint(data.qu_yhgl1.fieldbyname( 'id ').asstring); newname:= '管理员 '+inttostr(count1); data.qu_yhgl3.close; data.qu_yhgl3.sql.clear; data.qu_yhgl3.SQL.add( 'update pass set name=:name, passwd=:passwd, qx=:qx, alias=:alias, issuper=:issuper, flag=:flag '); data.qu_yhgl3.parambyname( 'name ').asstring:=edit1.text; data.qu_yhgl3.parambyname( 'passwd ').asstring:=edit2.text; data.qu_yhgl3.parambyname( 'qx ').asstring:= '111111111 '; data.qu_yhgl3.parambyname( 'alias ').asstring:= 'newname '; data.qu_yhgl3.parambyname( 'issuper ').asstring:= 'y '; data.qu_yhgl3.parambyname( 'flag ').asstring:= '1 '; data.qu_yhgl3.execsql; edit1.text:= 'name '+inttostr(count1); edit2.text:= 'passwd '+inttostr(count1); end; if data.qu_yhgl1.recordcount=0 then begin count2:=data.qu_yhgl2.recordcount+1; newname:= '管理员 '+inttostr(count2); data.qu_yhgl4.close; data.qu_yhgl4.sql.clear; data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (value1,value2,value3,value4,value5,value6,value7) '); data.qu_yhgl4.parambyname( 'value1 ').asinteger:=count2; data.qu_yhgl4.parambyname( 'value2 ').asstring:=edit1.text; data.qu_yhgl4.parambyname( 'value3 ').asstring:=edit2.text; data.qu_yhgl4.parambyname( 'value4 ').asstring:= '111111111 '; data.qu_yhgl4.parambyname( 'value5 ').asstring:= 'newname '; data.qu_yhgl4.parambyname( 'value6 ').asstring:= 'y '; data.qu_yhgl4.parambyname( 'value7 ').asstring:= '1 '; data.qu_yhgl4.execsql; edit1.text:= 'name '+inttostr(count2); edit2.text:= 'passwd '+inttostr(count2); end; end; end;
if data.qu_yhgl1.recordcount = 0 then if data.qu_yhgl1.recordcount = 1 then
这两个的recordcount都是inaccessble value 好像都没得到执行
拜托了
|
| |
|
|
#87楼 得分:0回复于:2001-10-03 12:47:23
chechy(chechy): 其实又有多少人去理解了面向对象呢
VB中照样有控件,照样有DLL,照样有Class,只是不支持继承
如果你具备了这种思想,你照样能够做到面向对象 将功能划分,同样能够进行封装
不过C++的面向对象更加强大,我喜欢C++的思想和它的语法 但我不否定VB,对于开发MIS,VB有它的优势
重要的还是你的思想! |
| |
|
|
#88楼 得分:0回复于:2001-10-03 12:49:01
问题还是在SQL语句上。 data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6,:value7) '); |
| |
|
|
#89楼 得分:0回复于:2001-10-03 12:50:06
呵呵,我对继承根本没兴趣。实际上,抽象模型最重要的多态方面的考虑,而不是继承。 参考一下Nicrosoft的文章。 |
| |
|
|
#90楼 得分:0回复于:2001-10-03 12:50:52
data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6,:value7) '); |
| |
|
|
#91楼 得分:0回复于:2001-10-03 12:54:44
偶刚才是粘贴你的回复运行的,报错 data.qu_yhgl4.SQL.add( 'insert into pass (id,name,passwd,qx,alias,issuper,flag) values (:value1,:value2,:value3,:value4,:value5,:value6,:value7) ');
|
| |
|
|
#92楼 得分:0回复于:2001-10-03 12:57:03
|
|
|
#93楼 得分:0回复于:2001-10-03 12:57:26
|
|
|
#94楼 得分:0回复于:2001-10-03 12:57:43
报什么错, 如果只是sql语句错误,只要不执行open操作,程序是可以运行起来的 |
| |
|
|
#95楼 得分:0回复于:2001-10-03 12:58:21
呵呵,看过了,但我可以在VB中通过 dim plane as Object plane.fly()
这样来实现对于接口相同但对象不同的调用的
|
| |
|
|
#96楼 得分:0回复于:2001-10-03 12:58:26
偶吧 用户管理 模块全部重写了,因此成败就在这些代码了 |
| |
|
|
#97楼 得分:0回复于:2001-10-03 12:59:06
|
|
|
#98楼 得分:0回复于:2001-10-03 13:00:32
type mismatch in exprission
|
| |
|
|
#99楼 得分:0回复于:2001-10-03 13:03:23
if data.qu_yhgl1.recordcount = 0 then if data.qu_yhgl1.recordcount = 1 then
跟踪这两个的recordcount,结果显示都是inaccessble value 好像都没得到执行
|
| |
|
|
#100楼 得分:0回复于:2001-10-03 13:05:26
;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag=0 '); data.qu_yhgl1.open;
flag到底是什么类型的,如果是字符类型, ;
data.qu_yhgl1.close; data.qu_yhgl1.sql.clear; data.qu_yhgl1.SQL.add( 'select min(id) from pass where flag= '+#39+ '0 '+#39+ ') '; data.qu_yhgl1.open;
| |
|