ParamByname kullanmak istemeyenler için

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

ParamByname kullanmak istemeyenler için

Mesaj gönderen Lost Soul »

Önceden verildi mi bilmiyorum. Denk gelmedi bana bayağı bi tırmaladım. Başkaları tırmalamasın diye paylaşayım dedim.

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.


peki parambyname varken neden buna ihtiyaç duyulur.

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.
Cevapla