各位老大,请问我的下列代码问题出在哪?query1.SQL.add('select 姓名,性别 from hyzl');
query1.sql.add('where 姓名=''孙林''');
query1.Open;
query1.FieldValues['姓名']:=edit1.text;编译也能通过,执行时提示:
Project project1.exe raised exception class EDBEngineError with message
'Insufficien memory for this operratin
Alias hj process stopped .use step or run to continue.
主要是加了最后一句才有这个提示,其中“hj”我的ODBC名。
另外还有一个小问题,就是那个条件后面的姓名值为什么要加两个单引号,在SQL Server 的查询分析器中却只要一个呀?还有若姓名值是“'孙林'”,即外面加单引号,在查询分析器中只要加三个单引号即 select * from hyzl where 姓名='''孙林'''就能实现,可在Delphi的query构件没有办法实现?
query1.sql.add('where 姓名=''孙林''');
query1.Open;
query1.FieldValues['姓名']:=edit1.text;编译也能通过,执行时提示:
Project project1.exe raised exception class EDBEngineError with message
'Insufficien memory for this operratin
Alias hj process stopped .use step or run to continue.
主要是加了最后一句才有这个提示,其中“hj”我的ODBC名。
另外还有一个小问题,就是那个条件后面的姓名值为什么要加两个单引号,在SQL Server 的查询分析器中却只要一个呀?还有若姓名值是“'孙林'”,即外面加单引号,在查询分析器中只要加三个单引号即 select * from hyzl where 姓名='''孙林'''就能实现,可在Delphi的query构件没有办法实现?
解决方案 »
- delphi 开发64位系统 需要MD5计算 怎么把原来32位的MD5转64位
- 大哥哥,大姐姐,动画的图片如何进行点阵(比如在LED屏上显示一只鸟儿在飞)?
- 如何知道模拟键盘操作的函数keybd_event的击键代码
- 为什么我的DELFHI.EXE文件在其他(没有装DELPHI)的机器上不能执行呢?(我已经在其他机器上设置了数据源)
- Delphi中有没有可以自动屏蔽不合法输入的控件?
- 请问有没有简便的方法用编程的方式去创建虚拟目录和站点?
- 有关B/S和C/S的比较
- TComboBox的一个很奇怪的问题
- ===== 统计一下大家认为优秀的Delphi控件 ========
- dbgrid怎么加入合计??
- 请问怎样用鼠标拖动一个 控件 在窗体中移动 ????????????急!!!!!!
- 编译的时候提示找不到dxExEdtr.dcu,请问要装什么控件啊?
query1.sql.add('where 姓名=''孙林''');
query1.Open;
query1.append;query1.FieldValues['姓名']:=edit1.text在sql直接运行,而在delphi先把他当字符传呢,外面多写''了,里面自然改变
'Insufficien memory for this operratin
Alias hj process stopped .use step or run to continue.關于上面的錯誤信息主要是由自己導致的.
最常見的比如你按F9運行程序後不調用窗體的Close方法, 而直接按Ctrl+F2強行中斷! 這樣反復五次左右最會出現上現异常, 你必需重新啟動Delphi.固計主要原因為內存泄漏, 也許是Delphi的bug.
治標的方法是不要按Ctrl+F2強行中斷程序!!!!>>>>>
query1.Open;
query1.FieldValues['姓名']:=edit1.text;
上面的代碼也有問題, 樓上的正确
begin
sql.clear
sql.add('select 姓名,性别 from hyzl');
sql.add(' where 姓名=''孙林''');
open;
edit;
fieldbyname('姓名').value:=edit1.text;
post;
end;
在sql直接运行,而在delphi先把他当字符传呢,外面多写''了,里面自然改变
是呀,先当字符串,外面多写了'',是指整个个SQL语句外面都用单引号括起来,可那个姓名的值为什么要用两个单引号呢?似乎是这样才对:
sql.add(' where 姓名='孙林'');
select 姓名,性别 from hyzl where 姓名='孙林''select 姓名,性别 from hyzl where 姓名=''孙林'''
OK!加一个edit就通过了!谢谢,但是还有一个小问题就是引号的问题小弟还是不明白?
而且我反复试了多次,若将姓名在SQL Server中改成用单引号括起来即'孙林',在SQL Server中可以执行:select 姓名,性别 from hyzl where 姓名='''孙林''',即“若字符串中含有引号,可用两个引号括起来”,但是Delphi我却没有办法实现!这其实是小问题,想信也没有哪个无聊的家伙在姓名值中加入引号,只是小弟一向喜欢研究一些细节问题,请不吝赐教!
在设计时将sql设为:select * from aa where xm='abc'是可以查出xm为'abc'的记录。
但用sql.add时就不行了。提示语法错,它会认为是:select * from aa where xm="abc"
为了避免这种情况,楼主就用aa like '%abc%'这样好了,查询所有aa字段中包含有abc的记录.
在设计时将sql设为:select * from aa where xm='''abc'''是可以查出xm为'abc'的记录。
query1.sql.add(' where 姓名=''孙林'''); //注意有空格
query1.Open;
query1.edit;
query1.FieldByName('姓名').asstring:=edit1.text;
query1.post;
上面我错了,用下面的:
adoquery1.SQL.Add('select * from aa where xm='+''''+'''''abc'''''+'''');
是可以查出xm为'abc'的记录。对不起啊!!!
dlid:=edi1.text
query1.sql.add('select * from aa where ID='''+dlid+'''');
为什么query1.sql.add('select * from aa where ID=edit1.text);
或者query1.sql.add('select * from aa where ID=dlid);就不行呢,要知道在SQL Server中可以执行的呀?请指教!
//不知你是否明白
unit dl;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;type
TdlForm = class(TForm)
GroupBox1: TGroupBox;
RB1: TRadioButton;
RB2: TRadioButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Cancel: TButton;
OK: TButton;
Database1: TDatabase;
Table1: TTable;
Table2: TTable;
Query1: TQuery;
procedure RB1Click(Sender: TObject);
procedure RB2Click(Sender: TObject);
procedure OKClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
dlForm: TdlForm;implementation{$R *.dfm}procedure TdlForm.RB1Click(Sender: TObject);
begin
if RB1.Checked=False then
begin
RB1.Checked:=True;
RB2.Checked:=False;
end;
Edit1.Enabled:=True;
Edit2.Enabled:=True;
Edit1.Color:=clWindow;
Edit2.Color:=clWindow;
end;procedure TdlForm.RB2Click(Sender: TObject);
begin
if RB2.Checked=False then
begin
RB2.Checked:=True;
RB1.Checked:=False;
end;
Edit1.Enabled:=False;
edit2.Enabled:=False;
Edit1.Color:=clMenu;
edit2.Color:=clMenu;
end;procedure TdlForm.OKClick(Sender: TObject);
var IsHy:boolean;
dlhyid,dlzxb:string;
begin
IsHy:=RB1.Checked;
if IsHy then
if (edit1.Text='') then
edit1.SetFocus
else
begin
dlhyid:=Edit1.Text;
query1.close;
query1.sql.clear;
query1.sql.add('select 会员ID,口令,性别 from hyzl');
query1.sql.add('where 会员ID=dlhyid');//这里我没有用'''+dlhyid+''''
query1.Open;
query1.Edit;//这个东东也加了;
//验证会员口令,问题就出在这儿!
if (query1.RecordCount<>1)or(edit2.text<>query1.fieldvalues['口令']) then
begin
showMessage('会员号或口令不对,请检查。');
edit2.SetFocus;
end
else
showMessage('登录成功');
dlzxb:=query1.fieldvalues['性别'];
end;
end;end.
这个程序我并没有写完,只是写一部分调试后再另外的,但却出了问题,不知道为什么!主要是一个登录界面,错误提示除'cannot find object ,',外其作相同,不知为什么,烦死了。
var
IsHy:boolean;
dlhyid,dlzxb:string;
begin
IsHy:=RB1.Checked;
if IsHy then
if (edit1.Text='') then
edit1.SetFocus
else
begin
dlhyid:=Edit1.Text;
query1.close;
query1.sql.clear;
query1.sql.add('select 会员ID,口令,性别 from hyzl');
query1.sql.add(' where 会员ID=:temp');//注意前面空一格
query1.Parameters.ParamByName('temp').value:=dlhyid;//使用参数赋值
query1.Open;
//query1.Edit;这里只要查询,query1.edit就不需要了
if (query1.RecordCount<>1) or (edit2.text<>query1.fieldbyname('口令').value) then
begin
showMessage('会员号或口令不对,请检查。');
edit2.SetFocus;
end
else
begin
showMessage('登录成功');
dlzxb:=query1.fieldbyname('性别').vaule;
end;
end;//end edit1.text<>''
end;//end ishy=trueend;//不知楼主是不是这个意思....
query1.Parameters.ParamByName('temp').value:=dlhyid;[Error] dl.pas(83): Undeclared identifier: 'parameters'
[Error] dl.pas(83): Missing operator or semicolon
[Error] dl.pas(83): Missing operator or semicolon
[Fatal Error] dlproject.dpr(5): Could not compile used unit 'dl.pas'
query换这个:
query1.Params.ParamByName('temp').value:=dlhyid;