Lazarus Database Tutorial/TryDbpp

From Lazarus-ccr

Jump to: navigation, search

program qtest;
 
uses mysql_v4;
 
Const
  DataBase : Pchar = 'testdb';
 
var
 count,num : longint;
 code : integer;
 sock : PMYSQL;
 qmysql : TMYSQL;
 qbuf : string [160];
 rowbuf : MYSQL_ROW;
 dummy, dummy1, dummy2, dummy3, dummyquery, dumquery : string;
 recbuf : PMYSQL_RES;
 alloc : PMYSQL;
 host, user, passwd, Query : Pchar;
 
begin
 if paramcount=1 then
   begin
   Dummy:=Paramstr(1)+#0;
   DataBase:=@Dummy[1];
   end;
Write ('Enter Hostname: '); readln (dummy1); dummy1 := dummy1 + #0; host := @dummy1[1];
write ('Enter Username: '); readln (dummy2); dummy2 := dummy2 + #0; user := @dummy2[1];
write ('Enter Password: '); readln (dummy3); dummy3 := dummy3 + #0; passwd := @dummy3[1];  
 
Writeln ('Allocating Space...');
 alloc := mysql_init(PMYSQL(@qmysql));
 Write ('Connecting to MySQL...');
 sock :=  mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
 if sock=Nil then
   begin
   Writeln (stderr,'Couldn''t connect to MySQL.');
   Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
   halt(1);
   end;
 Writeln ('Done.');
 Writeln ('Connection data:');
{$ifdef Unix}
 writeln ('Mysql_port      : ',mysql_port);
 writeln ('Mysql_unix_port : ',mysql_unix_port);
{$endif}
 writeln ('Host info       : ',mysql_get_host_info(sock));
 writeln ('Server info     : ',mysql_stat(sock));
 writeln ('Client info     : ',mysql_get_client_info);
 
 Writeln ('Selecting Database ',DataBase,'...');
 if mysql_select_db(sock,DataBase) < 0 then
   begin
   Writeln (stderr,'Couldn''t select database ',Database);
   Writeln (stderr,mysql_error(sock));
   halt (1);
   end;
 
repeat
write ('Enter SQL Query: '); readln (dumquery); dummyquery := dumquery + #0; 
query := @dummyquery[1];
 
 writeln ('Executing query : ',Query,'...');
   if (mysql_query(sock,Query) < 0) then
     begin
     Writeln (stderr,'Query failed ');
     writeln (stderr,mysql_error(sock));
     Halt(1);
     end;
 
 recbuf := mysql_store_result(sock);
 if RecBuf=Nil then
   begin
   Writeln ('Query returned nil result.');
   mysql_close(sock);
   halt (1);
   end;
 Writeln ('Number of records returned  : ',mysql_num_rows (recbuf));
 Writeln ('Number of fields per record : ',mysql_num_fields(recbuf));
 
 rowbuf := mysql_fetch_row(recbuf);
 while (rowbuf <>nil) do
      begin
      Write  ('(Id: ', rowbuf[0]);
      Write  (', Name: ', rowbuf[1]);
      Writeln(', Email : ', rowbuf[2],')');
      rowbuf := mysql_fetch_row(recbuf);
      end;
until dumquery = 'quit';
 
 Writeln ('Freeing memory occupied by result set...');
 mysql_free_result (recbuf);
 
 Writeln ('Closing connection with MySQL.');
 mysql_close(sock);
 halt(0);
end.
 
 $Log: testdb.pp,v $
 
 
 Revision  2004/04/13 by Chris Kirkpatrick: renamed as trydb.pp, inserted lots for mysql v4, made more interactive
 
 Revision 1.3  2002/09/07 15:42:53  peter
   * old logs removed and tabs fixed
 
 Revision 1.2  2002/05/31 11:54:33  marco
 * Renamefest for 1.0, many 1.1.x spots patched also.
 
 Revision 1.1  2002/01/29 17:54:54  peter
   * splitted to base and extra