11
votes

Delphi 7: ADO, besoin d'un exemple de codage de base

Je suis un débutant complet ici. Quelqu'un peut-il s'il vous plaît poster du code Delphi à

  • Créer une base de données
  • Ajouter une table simple
  • Fermez la base de données

    Puis, plus tard

    • Ouvrez une base de données
    • Lire chaque table
    • Lisez chaque champ d'une table donnée
    • Effectuez une recherche simple

      Désolé d'être si désemparé. J'ai fait google, mais j'ai trouvé un tutoriel utile ...

      En outre, il serait utile que la base de données sous-jacente était MySQL (5.1.36) (je ne sais même pas si cela fait une différence)


0 commentaires

3 Réponses :


4
votes

L'un des meilleurs endroits pour les exemples Delphes est www.delphi.about.com. Ils ont des tas de tutoriels et d'exemples. Leurs forums sont vraiment bons aussi bien. Dave


1 commentaires

Merci (+1). J'ai regardé delphi.about.com/od/mysql/qt/mysqladoconn. htm mais confus qu'il semble que vous devez donner un nom de base de données dans la chaîne de connexion, mais il semble qu'il y ait toujours une base de données appelée "mysql", donc je vais essayer de vous connecter à cela, puis de créer mon base de données. Jusqu'à présent, pas de succès, d'où la recherche d'un exemple de code concret. Merci encore, cependant. C'est un bon site.



-1
votes

Vous avez besoin de MyODBC dans votre système, mieux utiliser ZEOS pour connecter la base de données MySQL


0 commentaires

27
votes

@mawg, j'ai écrit un programme simple pour que vous ayez ilustrer comment travailler avec Ado et Delphi. Ceci est une application de console, mais explique les bases.

Avant d'exécuter ce code, vous devez télécharger et installer le connecteur ODBC à partir de cette emplacement . P>

Vous pouvez améliorer et adapter ce code à vos besoins. P>

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.


3 commentaires

J'ai changé une seule ligne, à adoconnection.ConnectionsRing: = Format (Strconnection ['localh Ost', base de données, 'root'', ']); Et ça a fonctionné !! Au moins, il a couru jusqu'à insertreg () et s'est plaint d'arguments du mauvais type. Mais peu importe ça, c'est exactement ce que j'avais espéré !!!! Je ne vous remercierai jamais assez!!!


Y a-t-il un moyen d'utiliser ce strconnection = 'pilote = {MySQL ODBC 3.51 pilote}; serveur =% s; base de données =% s; utilisateur =% s; Mot de passe =% s; option = 3; '; chaîne de connexion mais ne spécifie pas la base de données ? .. Je veux dire si je veux vérifier si la connexion mais il n'y a pas encore créé de bases de données.


@Presleydias, vous avez toujours besoin de spécifier une base de données dans la chaîne de connexion afin que vous puissiez utiliser le DB "mysql" qui existe toujours.