【问题标题】:Delphi 7: ADO, need basic coding exampleDelphi 7:ADO,需要基本的编码示例
【发布时间】:2011-02-24 11:18:09
【问题描述】:

我在这里是一个完整的初学者。有人可以将一些Delphi代码发布到

  • 创建数据库
  • 添加一个简单的表格
  • 关闭数据库

然后,稍后

  • 打开一个数据库
  • 阅读每个表格
  • 读取给定表的每个字段
  • 执行简单搜索

对不起,我这么无知。 google了一下,没找到有用的教程……

另外,如果底层数据库是MySql(5.1.36)会很有用(我什至不知道这是否有什么不同)

【问题讨论】:

    标签: delphi ado


    【解决方案1】:

    @mawg,我为您编写了一个简单的程序来说明如何使用 ADO 和 Delphi。这是一个控制台应用程序,但解释了基础知识。

    在执行此代码之前,您必须从location 下载并安装 odbc 连接器。

    您可以根据您的要求改进和调整此代码。

    program ProjectMysqlADO;
    
    {$APPTYPE CONSOLE}
    
    uses
      ActiveX,
      DB,
      ADODB,
      SysUtils;
    
    const
    //the connection string
    StrConnection='Driver={MySQL ODBC 3.51 Driver};Server=%s;Database=%s;User=%s; Password=%s;Option=3;';
    
    
    var
    AdoConnection : TADOConnection;
    
    procedure SetupConnection(DataBase:String);//Open a connection
    begin
      Writeln('Connecting to MySQL');
      AdoConnection:=TADOConnection.Create(nil);
      AdoConnection.LoginPrompt:=False;//dont ask for the login parameters
      AdoConnection.ConnectionString:=Format(StrConnection,['your_server',DataBase,'your_user','your_password']);
      AdoConnection.Connected:=True; //open the connection
      Writeln('Connected');
    end;
    
    procedure CloseConnection;//Close an open connection
    begin
      Writeln('Closing connection to MySQL');
      if AdoConnection.Connected then
      AdoConnection.Close;
      AdoConnection.Free;
      Writeln('Connection closed');
    end;
    
    procedure CreateDatabase(Database:string);
    begin
      Writeln('Creating Database '+database);
      AdoConnection.Execute('CREATE DATABASE IF NOT EXISTS '+Database,cmdText);
      Writeln('Database '+database+' created');
    end;
    
    procedure CreateTables;
    begin
      Writeln('Creating Tables');
      AdoConnection.Execute(
      'CREATE TABLE IF NOT EXISTS customers ('+
      'id      INT,'+
      'name    VARCHAR(100),'+
      'country VARCHAR(25) )',cmdText);
      Writeln('Tables Created');
    end;
    
    
    procedure DeleteData;
    begin
      Writeln('Deleting dummy data');
      AdoConnection.Execute('DELETE FROM customers');
      Writeln('Data deleted');
    end;
    
    procedure InsertData;
    
        Procedure InsertReg(id:integer;name,country:string);
        var
        ADOCommand : TADOCommand;
        begin
          ADOCommand:=TADOCommand.Create(nil);
          try
           ADOCommand.Connection:=AdoConnection;
           ADOCommand.Parameters.Clear;
           ADOCommand.CommandText:='INSERT INTO customers (id,name,country) VALUES (:id,:name,:country)';
           ADOCommand.ParamCheck:=False;
           ADOCommand.Parameters.ParamByName('id').Value      := id;
           ADOCommand.Parameters.ParamByName('name').Value    := name;
           ADOCommand.Parameters.ParamByName('country').Value := country;
           ADOCommand.Execute;
          finally
          ADOCommand.Free;
          end;
        end;
    
    begin
        Writeln('Inserting Data');
        InsertReg(1,'Lilian Kelly','UK');
        InsertReg(2,'John and Sons','USA');
        InsertReg(3,'William Suo','USA');
        InsertReg(4,'MARCOTEC','UK');
        Writeln('Data Inserted');
    end;
    
    procedure ReadData;
    var
      AdoQuery : TADOQuery;
    begin
       AdoQuery:=TADOQuery.Create(nil);
       try
        AdoQuery.Connection:=AdoConnection;
        AdoQuery.SQL.Add('SELECT * FROM customers');
        AdoQuery.Open;
        while not  AdoQuery.eof do
        begin
          Writeln(format('%s %s %s',[AdoQuery.FieldByname('id').AsString,AdoQuery.FieldByname('name').AsString,AdoQuery.FieldByname('country').AsString]));
          AdoQuery.Next;
        end;
       finally
       AdoQuery.Free;
       end;
    end;
    
    begin
      CoInitialize(nil); // call CoInitialize()
      try
           Writeln('Init');
           try
             SetupConnection('mysql'); //first will connect to the  mysql database , this database always exist
             CreateDatabase('Mydb'); //now we create the database
             CloseConnection; //close the original connection
             SetupConnection('Mydb'); //open the connection pointing to the Mydb database
             CreateTables; //create a sample table
             DeleteData; //Delete the dummy data before insert
             InsertData; //insert a dummy data
             ReadData; //read the inserted data
             CloseConnection; //close the connection
           except
             on E : Exception do
               Writeln(E.Classname, ': ', E.Message);
           end;
          Readln;
      finally
       CoUnInitialize; // free memory
      end;
    end.
    

    【讨论】:

    • 我将一行更改为 AdoConnection.ConnectionString:=Format(StrConnection['localhost',DataBase,'root','']);它奏效了!!至少,它一直运行到 InsertReg() 并抱怨参数类型错误。不过没关系,这正是我所希望的!!!!我感激不尽!!!
    • 有什么方法可以使用这个StrConnection='Driver={MySQL ODBC 3.51 Driver};Server=%s;Database=%s;User=%s; Password=%s;Option=3;'; 连接字符串但不指定Database 吗?我的意思是如果我想检查是否连接但还没有创建数据库。
    • @PresleyDias,你总是需要在连接字符串中指定一个数据库,所以你可以使用一直存在的“mysql”数据库。
    【解决方案2】:

    Delphi 示例的最佳位置之一是 www.delphi.about.com。他们有大量的教程和示例。他们的论坛也很好。 戴夫

    【讨论】:

    • 谢谢 (+1)。我确实看过delphi.about.com/od/mysql/qt/mysqladoconn.htm,但很困惑,似乎你必须在连接字符串中给出一个数据库名称,但似乎总是有一个名为“mysql”的数据库,所以我会尝试连接到那个然后创建我的数据库。到目前为止,没有成功,因此寻找一个具体的代码示例。不过,再次感谢。这是一个很好的网站。
    【解决方案3】:

    你的系统需要MyODBC,最好用zeos连接mysql数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多