2010-05-27 6 views
10

Я здесь совершенно новичок. Может кто-то пожалуйста, напишите некоторые Delphi кодDelphi 7: ADO, нужен пример базового кодирования

  • создать базу данных
  • добавить простую таблицу
  • закрыть базу данных

затем, позже

  • открыть базу данных
  • читать каждую таблицу
  • читать каждое поле данной таблицы
  • выполнить простой поиск

Жаль быть настолько невежественны. Я сделал google, но не нашел полезного учебника ...

Кроме того, было бы полезно, если базовая база данных была MySql (5.1.36) (я даже не знаю, имеет ли это значение)

ответ

26

@mawg, я написал простую программу для вас ilustrate, как работать с ADO и Delphi. это консольное приложение, но объясняет основы.

перед выполнением этого кода вы должны загрузить и установить разъем odbc из этого location.

Вы можете улучшить и адаптировать этот код к вашим требованиям.

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

Я изменил одну строку, на AdoConnection.ConnectionString: = Формат (StrConnection ['localhost', DataBase, 'root', '']); И это сработало! По крайней мере, он работал до InsertReg() и жаловался на аргументы неправильного типа. Но неважно, это именно то, на что я надеялся !!!! Я не могу тебя отблагодарить!!! – Mawg

+0

Есть ли способ использовать этот 'StrConnection = 'Driver = {MySQL ODBC 3.51 Driver}; Server =% s; Database =% s; User =% s; Password =% s; Option = 3; '; 'строка подключения, но не указать« Database »? .. Я имею в виду, если я хочу проверить, есть ли соединение, но пока нет созданных баз данных. – PresleyDias

+0

@PresleyDias, вам всегда нужно указать базу данных в строке соединения, поэтому вы можете использовать «mysql» db, который всегда существует. – RRUZ

3

Одним из лучших мест для примеров Delphi является www.delphi.about.com. У них есть куча учебников и примеров. Их форумы действительно хороши. Dave

+0

Спасибо (+1). Я посмотрел на http://delphi.about.com/od/mysql/qt/mysqladoconn.htm, но запутался, что кажется, что вы должны указать имя базы данных в строке подключения, но кажется, что всегда есть базы данных под названием «mysql», поэтому я попытаюсь подключиться к этому, а затем создать свою базу данных. Пока что нет успеха, следовательно, поиск конкретного примера кода. Еще раз спасибо. Это хороший сайт. – Mawg

-1

Вы должны MyODBC в вашей системе, лучше использовать Zeos для подключения базы данных MySQL

+0

Вы прочитали вопрос? Он запрашивает код Delphi ... – Mawg

Смежные вопросы