Aslında yapmak istediğim şu başka bir programlama dili kullanrak (örn.python) firebirde baglanmak mysql de mysql dll lerini kullanarak bu işi yapa biliyorduk 3. parti bileşenler yaygınlaşmadan.
Kod: Tümünü seç
unit UDbfToMysql;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
_libmysq, ComCtrls, StdCtrls, Buttons, fCtrls, Mask, Db, DBTables, Grids,
DBGrids, fDBCtrls;
type
TfrmDbfToMysql = class(TForm)
StatusBar: TStatusBar;
SelectDB: TBitBtn;
ListTapDayNo: TBitBtn;
grdListe: TfsDBGrid;
tblDbf: TQuery;
DataSource1: TDataSource;
tblTapno: TQuery;
DayMont: TfsMaskEdit;
fsLabel1: TfsLabel;
fsDBGrid1: TfsDBGrid;
DataSource2: TDataSource;
TapData: TBitBtn;
SendMysql: TBitBtn;
Sql: TfsMemo;
StrGrid: TfsStringGrid;
Tap_read: TBitBtn;
fsBitBtn1: TfsBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SelectDBClick(Sender: TObject);
procedure ListTapDayNoClick(Sender: TObject);
procedure TapDataClick(Sender: TObject);
procedure SendMysqlClick(Sender: TObject);
procedure Tap_readClick(Sender: TObject);
procedure fsBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmDbfToMysql: TfrmDbfToMysql;
mysqlrec: mysql;
connected: Integer;
Host: string;
User: string;
Pswd: string;
Database: string;
implementation
{$R *.DFM}
procedure TfrmDbfToMysql.FormCreate(Sender: TObject);
var
DayMontStr: string;
begin
connected := 0;
Host := 'anamakine';
User := 'root';
Pswd := '';
Database := 'Kroman';
mysql_connect(@mysqlrec, Pchar(Host), Pchar(User), Pchar(Pswd));
if mysqlrec._net.last_errno = 0 then
begin
StatusBar.Panels[1].Text := ' Bağlandı';
connected := 1;
end
else
begin
ShowMessage(IntToStr(mysqlrec._net.last_errno));
StatusBar.Panels[1].Text := ' Olumsuz';
end;
DayMontStr := DateToStr(Date - 1);
DayMont.Text := DayMontStr[1] + DayMontStr[2] + DayMontStr[4] + DayMontStr[5];
end;
procedure TfrmDbfToMysql.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if connected = 1 then mysql_close(@mysqlrec);
end;
procedure TfrmDbfToMysql.SelectDBClick(Sender: TObject);
var
check: Integer;
begin
if connected = 1 then
begin
check := mysql_select_db(@mysqlrec, Pchar(Database));
if check <> 0 then
begin
ShowMessage(mysqlrec._net.last_error);
StatusBar.Panels[3].Text := ' Veri tabanı seçilemedi [ ' + Database + ' ]';
end
else StatusBar.Panels[3].Text := ' Veri tabanı seçildi [ ' + Database + ' ]';
end;
end;
procedure TfrmDbfToMysql.ListTapDayNoClick(Sender: TObject);
begin
with tblTapNo do
begin
Close;
SQL.Clear;
SQL.Add('select DISTINCT(SPUR1) from L025' + DayMont.Text + '.dbf');
Open;
end;
caption := IntToStr(tblTapno.Fields[0].Value);
end;
procedure TfrmDbfToMysql.TapDataClick(Sender: TObject);
var tapno: string;
begin
with tblDbf do
begin
tapno := IntToStr(tblTapNo.Fields[0].Value);
SQL.Clear;
SQL.Add('select * from L025' + DayMont.Text + '.dbf where SPUR1=' + tapno);
Open;
Last;
end;
end;
function FormatDate(Date: string): string;
begin
Result := Date[10]+Date[9]+Date[8]+Date[7]+'-'+Date[4]+Date[5]+'-'+Date[1]+Date[2];
end;
procedure TfrmDbfToMysql.SendMysqlClick(Sender: TObject);
var
query: string;
begin
query := format('insert into tap_reports (' +
'tap_id,' +
'tap_date,' +
'tap_no,' +
'tap_day_no,' +
'tap_power,' +
'tap_start,' +
'tap_stop,' +
'tap_on_power,' +
'tap_to_tap_time,' +
'tap_temperature_furnace,' +
'tap_temperature_pota,' +
'tap_weight) values(' +
'NULL,''%s'',''%s'',''%s'',''%s'',''%s:%s'',''%s:%s'',''%s'',''%s'',''%s'',''%s'',''%s'')', [
FormatDate(tblDbf.FieldbyName('DATUM').Value),
tblDbf.FieldByName('SPUR0').Value,
tblDbf.FieldByName('SPUR1').Value,
tblDbf.FieldByName('SPUR5').Value,
tblDbf.FieldByName('SPUR16').Value,
tblDbf.FieldByName('SPUR17').Value,
tblDbf.FieldByName('SPUR16').Value,
tblDbf.FieldByName('SPUR17').Value,
tblDbf.FieldByName('SPUR20').Value,
tblDbf.FieldByName('SPUR21').Value,
tblDbf.FieldByName('SPUR7').Value,
tblDbf.FieldByName('SPUR7').Value,
tblDbf.FieldByName('SPUR6').Value]);
Sql.Text := query;
mysql_query(@mysqlrec, pchar(query));
if mysqlrec._net.last_errno <> 0 then showmessage(trim(mysqlrec._net.last_error));
end;
procedure TfrmDbfToMysql.Tap_readClick(Sender: TObject);
var
presults: pmysql_res; //results structure *pointer
prow: pmysql_row; //row structure *pointer
row: mysql_row; //Couldnt figure out pointer arithmetic so....you'll see
i, j: Integer; //Counter vars
query: string;
begin
StrGrid.Cells[0, 0] := 'MysqlId';
StrGrid.Cells[1, 0] := 'Tarih';
StrGrid.Cells[2, 0] := 'Döküm No';
StrGrid.Cells[3, 0] := 'Günlük';
StrGrid.Cells[4, 0] := 'Güç';
StrGrid.Cells[5, 0] := 'Başlangıç';
StrGrid.Cells[6, 0] := 'Bitiş';
StrGrid.Cells[7, 0] := 'Enerjili';
StrGrid.Cells[8, 0] := 'Dökümden Döküme';
StrGrid.Cells[9, 0] := 'Ocak Sıcaklık';
StrGrid.Cells[10, 0] := 'Pota Sıcaklık';
StrGrid.Cells[11, 0] := 'Tonaj';
presults := nil;
query := Format('select * from tap_reports where tap_date=''%s'' order by tap_day_no', ['2002-06-26']);
try
mysql_query(@mysqlrec, pchar(query));
presults := mysql_store_result(@mysqlrec);
if mysqlrec._net.last_errno <> 0 then showmessage(trim(mysqlrec._net.last_error));
StrGrid.RowCount := presults^.row_count+1;
for i := 1 to presults^.row_count do begin
prow := mysql_fetch_row(presults);
row := prow^; //Only way I could figure out to use an index into a MYSQL_ROW struct
for j := 0 to presults^.field_count - 1 do begin
StrGrid.Cells[j, i] := StrPas(row[j]); // Index into row for fields
end; // j
end; // i
finally
mysql_free_result(presults);
end;
end;
procedure TfrmDbfToMysql.fsBitBtn1Click(Sender: TObject);
begin
Caption:=FormatDate(DateToStr(now));
end;
end.
Firebird için bu şekilde bir kaynak mevcutmu onu merak ettim.
Not:işin aslı bazı uygulamaları taşıya bildiklerimizi pardus'a taşımak.
yavaş yavaş pardusa geçmek.