обслуживание компьютеров . oknabel.com . квартира на сутки отчетные документы . тумбы полки комоды

unit DdhDynDb;

interface

uses
Controls, Db, Forms, Classes, DbTables;

function ConvertClass(FieldClass: TFieldClass): TControlClass;

procedure NormalizeString(var S: string);

procedure ConnectDataFields(DbComp: TControl;
DataSource: TDataSource; FieldName: string);

function GenerateForm(StrList: TStringList;
SourceTable: TTable): TForm;

function GenerateSource(AForm: TForm;
FormName, UnitName: string): string;

implementation

uses
TypInfo, DbCtrls, SysUtils, StdCtrls, ExtCtrls, Windows;

const
FieldTypeCount = 15;

type
CVTable = array[1..FieldTypeCount, 1..2] of TClass;

// TBytesField and TVarBytesField are missing
const
ConvertTable: CVTable = (
(TAutoIncField, TDBEdit),
(TStringField, TDBEdit),
(TIntegerField, TDBEdit),
(TSmallintField, TDBEdit),
(TWordField, TDBEdit),
(TFloatField, TDBEdit),
(TCurrencyField, TDBEdit),
(TBCDField, TDBEdit),
(TBooleanField, TDBCheckBox),
(TDateTimeField, TDBEdit),
(TDateField, TDBEdit),
(TTimeField, TDBEdit),
(TMemoField, TDBMemo),
(TBlobField, TDBImage), {just a guess}
(TGraphicField, TDBImage));

function ConvertClass(FieldClass: TFieldClass):
TControlClass;
var
I: Integer;
begin
Result := nil;
for I := 1 to FieldTypeCount do
if ConvertTable[I, 1] = FieldClass then
begin
Result := TControlClass(
ConvertTable[I, 2]);
break; // jump out of for loop
end;
if Result = nil then
raise Exception.Create(’ConvertClass failed’);
end;

procedure NormalizeString(var S: string);
var
N: Integer;
begin
// remove the T
Delete(S, 1, 1);
{chek if the string is a valid Pascal identifier:
if not, replace spaces and other characters with underscores}
if not IsValidIdent(S) then
for N := 1 to Length(S) do
if not ((S[N] in [’A’..’Z']) or (S[N] in [’a’..’z'])
or ((S[N] in [’0′..’9′]) and (N <> 1))) then
S[N] := ‘_’;
end;

Страницы: 1 2 3 4 5

Эта запись была опубликована 14.12.2007в 20:38. В рубриках: Базы данных. Вы можете следить за ответами к этой записи через RSS 2.0. Комментарии пока закрыты, но Вы можете оставить трекбек со своего сайта.