PDA

View Full Version : آموزش: تبدیل نوع فیلد های کوئری به جدول واقعی در اس کیو ال



یوسف زالی
چهارشنبه 02 اردیبهشت 1394, 13:24 عصر
با سلام.
برای موردی لازم شد کوئری ایمپورت شده از XML رو در جدولی که خودم می سازم بریزم، برای همین این قطعه کد رو نوشتم.
این قطعه کد فیلد های متناظر رو برای هر فیلد سمت دلفی معرفی می کنه.


function GetSQLTypeOfField(Field: TField; IncludeIdentity: boolean = true): string;
begin
case Field.DataType of
ftString : Result := IfThen(TStringField(Field).FixedChar, '', 'var') + 'char(' + IntToStr(Field.Size) + ')';
ftSmallint : Result := 'smallint';
ftInteger : Result := 'int';
ftWord : Result := 'tinyint';
ftBoolean : Result := 'bit';
ftFloat : Result := 'float';
ftBCD : Result := 'decimal(' + IntToStr(TBCDField(Field).Precision) + ', ' + IntToStr(Field.Size) + ')';
ftDateTime : Result := 'datetime';
ftBytes : Result := IfThen(TBytesField(Field).ReadOnly and (Field.Size = 8), 'timestamp', 'binary(' + IntToStr(Field.Size) + ')');
ftVarBytes : Result := 'varbinary(' + IntToStr(Field.Size) + ')';
ftAutoInc : Result := 'int' + IfThen(IncludeIdentity, ' identity(1, 1)', '');
ftBlob : Result := 'varbinary(MAX)';
ftMemo : Result := 'varchar(MAX)';
ftWideString : Result := 'n' + IfThen(TWideStringField(Field).FixedChar, '', 'var') + 'char(' + IntToStr(Field.Size) + ')';
ftLargeint : Result := 'bigint';
ftVariant : Result := 'sql_variant';
ftGuid : Result := 'uniqueidentifier';
end;
end;


روش کار به این صورته که شما تک تک فیلد های دیتاست رو به این تابع می دید و این تابع می گه نوع مناسب سمت اس کیو ال برای این فیلد چیه.
تابع ساده و بسیار کار راه اندازیه.
امیدوارم بتونه مشکل کسی رو حل کنه.
با تشکر.