2010-05-27 13 views
10

Sono un principiante assoluto qui. Può per favore qualcuno inserire un certo codice Delphi perDelphi 7: ADO, è necessario un esempio di codifica di base

  • creare un database
  • aggiungere una semplice tabella
  • chiudere il database

poi, più tardi

  • aprire un database
  • leggi ogni tabella
  • leggere ogni campo di una determinata tabella
  • eseguire una semplice ricerca

Mi dispiace essere così all'oscuro. Ho fatto google, ma non ho trovato un tutorial utile ...

Inoltre, sarebbe utile se il database sottostante fosse MySql (5.1.36) (non so nemmeno se ciò faccia differenza)

risposta

26

@mawg, ho scritto un programma semplice per ilustrate come il lavoro con ADO e Delphi. questa è un'applicazione di console, ma spiega le basi.

prima di eseguire questo codice, è necessario scaricare e installare il connettore odbc da questo location.

È possibile migliorare e adattare questo codice alle proprie esigenze.

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. 
+0

Ho cambiato una sola riga, in AdoConnection.ConnectionString: = Format (StrConnection ['localhost', DataBase, 'root', '']); E ha funzionato !! Almeno, ha funzionato fino a InsertReg() e si è lamentato degli argomenti di tipo sbagliato. Ma non importa, è esattamente quello che speravo !!!! Non posso ringraziarti abbastanza!!! – Mawg

+0

C'è un modo per usare questo 'StrConnection = 'Driver = {Driver MySQL ODBC 3.51}; Server =% s; Database =% s; Utente =% s; Password =% s; Opzione = 3; '; 'stringa di connessione ma non specificare il' Database'? .. Voglio dire se voglio verificare se la connessione non è ancora stata creata. – PresleyDias

+0

@PresleyDias, è sempre necessario specificare un database nella stringa di connessione, quindi è possibile utilizzare il db "mysql" che esiste sempre. – RRUZ

3

Uno dei posti migliori per gli esempi Delphi è www.delphi.about.com. Hanno un mucchio di tutorial ed esempi. Anche i loro forum sono davvero buoni. Dave

+0

Grazie (+1). Ho guardato http://delphi.about.com/od/mysql/qt/mysqladoconn.htm ma mi sono confuso che sembra che tu debba dare un nome di database nella stringa connect, ma sembra che ci sia sempre un database chiamato "mysql", quindi cercherò di connettermi e quindi creare il mio database. Finora, nessun successo, da qui la ricerca di un concreto esempio di codice. Grazie ancora, però. È un buon sito. – Mawg

-1

È necessario MyODBC nel vostro sistema, un uso migliore ZEOS per connettere database mysql

+0

hai letto la domanda? Richiede il codice Delphi ... – Mawg

Problemi correlati