我使用delphi多年了,但从来没有使用数据库的东西,但最近开始研究和测试.
我必须说,我印象深刻,大部分事情都是自动发生的,我习惯用手写在php和python中.
我将为朋友(2层)5台用户计算机,1台数据库服务器开发商业系统.
数据库服务器将是一个体面的机器(raid-1)2硬盘驱动器运行(MySql5.1或Postgre或Firebird,打开建议).
ADO
的dbExpress
ZEOS
如您所见,所需的功能是:
我无法在真实场景(客户端,服务器)中测试所有内容,所以我希望有经验的人可以帮助我选择哪一个以及为什么.
编辑:谢谢大家,我想我会和ADO(可能)或Zeos一起去
在此先感谢
亚瑟
我有一个Delphi应用程序,它连接到Internet上的MySQL发布数据库,地址如mysql01.example.com:3306.
但是,我的客户端计算机位于代理后面,如果我通过代理,我就可以连接.我使用ZeosLib进行连接,它没有代理身份验证.
是否可以使用某种代理转发程序转发到代理的连接?还有其他可能解决这个问题吗?
非常感谢.
我试图像这样做一个多语句查询:
// without the second insert the query works fine.
// i need 2 querys to work because later, i'll do inserts on different kind of tables.
// that's why i need 2 querys, not a single query which insert 2 records.
with ZQuery1 do
begin
SQL.Clear;
SQL.Add('insert into client (name,age) values ('+QuotedStr('john')+','+QuotedStr('20')+');');
SQL.Add('insert into client (name,age) values ('+QuotedStr('doe')+','+QuotedStr('21')+');');
ExecSQL;
end;
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:SQL错误:您的SQL语法中有错误; 检查与您的MySQL服务器版本相对应的手册,以便在第2行的'insert into client(name,age)values('doe','21')'附近使用正确的语法;
我已经查看了手册,组件TZQuery和TZUpdateSql(来自zeos lib)提供了在内部执行多个语句的可能性.
谢谢GregD,经过多次测试,交易对我来说很好!这就是我如何使用,以帮助将来的其他人.
try
ZConnection.AutoCommit := True;
ZConnection.StartTransaction;
With ZQuery Do
begin
SQL.Clear;
SQL.Add('insert …Run Code Online (Sandbox Code Playgroud) 我正在开发一个艺术家档案和桌面软件的网站来管理其数据库内容.有许多运营商会在其收件箱中收到相同数量的待审核记录,以便进行审批和发布.问题是当两个或多个运算符尝试编辑同一记录时.数据库服务器(远程mysql)将引发锁定错误,或者只是维护最后保存它的运算符的数据.
在向另一个用户授予对此记录的访问权限之前,检查是否有人已经在编辑记录的最佳方法(更简单和更有效的方法),或者如果记录的所有者是他自己再次更新他的记录,那将是什么?网站?
该软件仍在实验室中.但当我将它交付给客户时,我知道这将是一个问题.
我可以创建一个表来将每个记录标记为"在编辑中"或"空闲",因此我不需要改变表的结构(因为人们已经在网站上使用它们).但我需要确保有更优雅/更快的方式来做到这一点.
我使用下一个代码在非autocommin连接上发布一些记录:
ZConnection1.AutoCommit := False;
try
ZTable1.Insert;
ZTable1.FieldByName('name').AsString := 'John Doe';
ZTable1.Post;
ZConnection1.Commit;
except
ZConnection1.Rollback;
end;
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我的数据库中没有保存任何内容.
我尝试下一个代码后......
ZConnection1.AutoCommit := False;
with ZQuery1 do begin
SQL.Text := 'INSERT INTO mytable (name) values ("John Doe")';
ExecSQL;
SQL.Text := SQL.Text + 'COMMIT' ;
try
ExecSQL;
except
SQL.Text := 'ROLLBACK';
ExecSQL;
end;
end;
Run Code Online (Sandbox Code Playgroud)
......一切都很完美.
我在第一个案子上做错了什么?我使用Delphi6,MySql,Zeos库和InnoDB表.
我正在使用最新的Zeos和SQLite 3.一旦我们创建了所有持久性整数字段,它通常很顺利,从MySQL转换TLargeInt.
但是当我们使用列定义unsigned big int(根据https://www.sqlite.org/datatype3.html允许的唯一无符号类型)时,Delphi会调用结果字段a ftWidestring.
我想在单个数据库文件上的2个表上显示TDbgrid数据.我试过写sql语句,如:
select "Client", "Address", "Balance" from "table1"
and "Payment" from "table2"
Run Code Online (Sandbox Code Playgroud)
但它始终显示此错误
SQL Error: Dynamic SQL Error DQL Error code = -104 Token Unknown - line 2,
column1 and.Error -104.Invalid token The SQL: select "Client", "Address", "Balance"
from "table1"
and "Payment" from "table2"
Run Code Online (Sandbox Code Playgroud)
我不知道是不可能的,或者我在编写代码时遇到错误,或者是我需要修改的TDbgrid.我搜索了一个zeos sql指南,但我找不到一个.我得到的只是:http://www.intitec.com/varios/A_ZEOS_basics_tutorial_not_only_for_firebird.pdf但我的一些问题仍未得到答复.
我正在使用firebird数据库2.5和delphi 7.
我可以在这上面使用哪些SQL代码?