Aşağıdaki kod MySQL veritabanı için hazırlanmıştır.
Firebird için kullanıcının Tarih dönüştürme fonksiyonlarını elden geçirmesi gereklidir.
Kod: Tümünü seç
unit SQLFuncts;
interface
uses
Math,forms,dialogs, DB,StrUtils, Classes, Controls,sysutils,
StdCtrls,Types,Variants;
// Veriyi sql'e uygun hale getir.
Function VarToMySQL (xValue : Variant):String;
// veri kümesini sql'e uygun hale getir ör: Result := 'Ali',5,'2009-10-12 13:30'
Function VarArrayTomySQL(xValues : array of variant):String;
implementation
function FormatNumber(Value, Width: Word): string;
begin
Result := IntToStr(Value);
while Length(Result) < Width do
Result := '0' + Result;
end;
function FormatSqlDate(Value: TDateTime): string;
var
Year, Month, Day: Word;
begin
DecodeDate(Value, Year, Month, Day);
Result := FormatNumber(Year, 4) + '-' + FormatNumber(Month, 2)
+ '-' + FormatNumber(Day, 2);
end;
function FormatSqlTime(Value: TDateTime): string;
var
Hour, Min, Sec, MSec: Word;
begin
DecodeTime(Value, Hour, Min, Sec, MSec);
Result := FormatNumber(Hour, 2) + ':' + FormatNumber(Min, 2)
+ ':' + FormatNumber(Sec, 2);
end;
//******************************************************************************
Function VarToMySQL (xValue : Variant):String;
//******************************************************************************
function FloatToStrEx(Value: Double): string;
var
Temp: Integer;
begin
Result := FloatToStr(Value);
if DecimalSeparator <> '.' then
begin
Temp := AnsiPos(DecimalSeparator,Result);
if Temp <> 0 then Result[Temp] := '.';
end;
end;
function DateTimeToSqlDateEx(Value: TDateTime): string;
begin
if Trunc(Value) <> 0 then
Result := FormatSqlDate(Value)
else
Result := '0001-01-01';
if Frac(Value) <> 0 then
begin
if Result <> '' then
Result := Result + ' ';
Result := Result + FormatSqlTime(Value);
end;
end;
function StringToSQL(xxValue:String):String;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(xxValue) do
if xxValue[I] = '''' then
Result := Result + ''''''
else Result := Result + xxValue[I];
end;
//******************************************************************************
Begin
case VarType(xValue) of
varEmpty, varNull:
Result := 'NULL';
varSmallint, varInteger, varByte:
Result := IntToStr(xValue);
varSingle, varDouble, varCurrency:
Result := FloatToStrEx(VarAsType(xValue, varDouble));
varDate:
begin
Result := DateTimeToSqlDateEx(xValue);
Result := '''' + Result + '''';
end;
varBoolean:
// if DatabaseType = dtMySql then
begin
if xValue then Result := '''Y'''
else Result := '''N''';
end;
else
Result := '''' + StringToSql(VarAsType(xValue, varString)) + '''';
end;
End;
Function VarArrayTomySQL(xValues : array of variant):String;
var
i:integer;
s:string;
Begin
s:='';
for i := low(xValues) to High(xValues) do
Begin
s:=s+VarToMySQL(xValues[i]);
if i<>High(xValues) then
s:=s+',';
End;
Result:=s;
End;
End.
aynı tabloya birden fazla kayıt gönderen sql script hazırlayıp gönderdiğinizi düşünün. burada parambyname ile yapmak için her veriye farklı bir paramname vermeniz gerekir.
e o zaman her bir kayıt için döngü yapp sırayla yollayalım...
bu verileri netten yolladığınızı düşünün.
tek seferde göndermek mi daha hızlı olur yoksa ayrı ayrı post etmek mi.