Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung? (https://www.delphipraxis.net/161709-ist-mein-programm-jetzt-wirklich-unicode-trotz-umwandlung.html)

TheMiller 17. Jul 2011 13:59

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Ich poste mal hier die Methoden, angefangen von der, die ich aufrufe:

Delphi-Quellcode:
ZQuery.FieldByName(Field).AsString;

function TDataSet.FieldByName(const FieldName: string): TField;
begin
  Result := FindField(FieldName);
  if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], Self);
end;


function TDataSet.FindField(const FieldName: string): TField;
begin
  Result := FFields.FindField(FieldName);
  if (Result = nil) and ObjectView then
    Result := FieldList.Find(FieldName);
  if Result = nil then
    Result := FAggFields.FindField(FieldName);
end;

function TFields.FindField(const FieldName: string): TField;
var
  I: Integer;
begin
  for I := 0 to FList.Count - 1 do
  begin
    Result := FList.Items[I];
    if WideCompareText(Result.FFieldName, FieldName) = 0 then Exit;
  end;
  Result := nil;
end;

function TField.GetAsString: string;
begin
  Result := GetClassDesc;
end;

function TField.GetClassDesc: string;
var
  I, L: Integer;
  S: string;
begin
  S := ClassName;
  I := 1;
  L := Length(S);
  if S[1] = 'T' then
    I := 2;
  if (L-I >= 5) and (CompareText(Copy(S, L - 4, 5), 'FIELD') = 0) then
    Dec(L, 5);
  FmtStr(Result, '(%s)', [Copy(S, I, L + 1 - I)]);
  if not IsNull then
    Result := AnsiUpperCase(Result);
end;

//////////////////////////////////////
Und hier TFieldDefs
//////////////////////////////////////
TFieldDefs = class(TDefCollection)
  private
    FParentDef: TFieldDef;
    FHiddenFields: Boolean;
    function GetFieldDef(Index: Integer): TFieldDef;
    procedure SetFieldDef(Index: Integer; Value: TFieldDef);
    procedure SetHiddenFields(Value: Boolean);
  protected
    procedure FieldDefUpdate(Sender: TObject);
    procedure ChildDefUpdate(Sender: TObject);
    procedure SetItemName(AItem: TCollectionItem); override;
    function GetFieldDefClass: TFieldDefClass; virtual;
  public
    constructor Create(AOwner: TPersistent); virtual;
    function AddFieldDef: TFieldDef;
    function Find(const Name: string): TFieldDef;
    procedure Update; reintroduce;
    { procedure Add kept for compatability - AddFieldDef is the better way }
    procedure Add(const Name: string; DataType: TFieldType; Size: Integer = 0;
      Required: Boolean = False);
    property HiddenFields: Boolean read FHiddenFields write SetHiddenFields;
    property Items[Index: Integer]: TFieldDef read GetFieldDef write SetFieldDef; default;
    property ParentDef: TFieldDef read FParentDef;
  end;
Ich hoffe da ist alles dabei, was du sehen wolltest ...

RWarnecke 17. Jul 2011 14:01

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Zitat:

Zitat von DJ-SPM (Beitrag 1112240)
Eine Frage noch: Was ist der Unterschied zwischen TUniConnection und der MySQL-Provider Komponente. Was ist der MySQL-Provider?

Mit der UniConnection und dem Provider stellst Du die Verbindung her. Dabei enthält die TUniConnection die Verbindungsdaten. Ohne den Provider gibt es eine Fehlermeldung, wenn Du versuchst die Datenbankverbindung aufzubauen.

himitsu 17. Jul 2011 14:10

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Zitat:

Zitat von DJ-SPM (Beitrag 1112243)
Ich hoffe da ist alles dabei, was du sehen wolltest ...

Eher weniger :zwinker:

Was gibt denn
Delphi-Quellcode:
ZQuery.FieldByName(Field).FieldType
für deine Stringfelder zurück?


Delphi-Quellcode:
uses TypInfo;

ShowMessage(GetEnumProp(ZQuery.FieldByName(Field), 'FieldType'));

TheMiller 17. Jul 2011 14:55

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Zitat:

Eher weniger ;)
War ja klar ;)


Bitte entschuldigt die "späte" Antwort ;)

Ich bekomme eine AV mit der Meldung: "Die Eigenschaft "FieldType" existiert nicht.

RWarnecke 17. Jul 2011 15:01

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Unter Zeos heißt die Eigenschaft DataType und nicht FieldType. Datatype gibt dann einen Integer zurück. Anhand des Integers kann man dann bestimmen, welchen Type das Feld hat. Hier ein Beispiel :
Delphi-Quellcode:
    begin
      case TMPQuery.Fields[IntZaehler].datatype of
        ftUnknown:
          begin
            sType := 'Unknown';
          end;
        ftString:
          begin
            sType := 'String';
          end;
        ftSmallint:
          begin
            sType := 'Smallint';
          end;
        ftInteger:
          begin
            sType := 'Integer';
          end;
        ftWord:
          begin
            sType := 'Word';
          end;
        ftBoolean:
          begin
            sType := 'Boolean';
          end;
        ftFloat:
          begin
            sType := 'Float';
          end;
        ftCurrency:
          begin
            sType := 'Currency';
          end;
        ftBCD:
          begin
            sType := 'BCD';
          end;
        ftDate:
          begin
            sType := 'Date';
          end;
        ftTime:
          begin
            sType := 'Time';
          end;
        ftDateTime:
          begin
            sType := 'DateTime';
          end;
        ftBytes:
          begin
            sType := 'Bytes';
          end;
        ftVarBytes:
          begin
            sType := 'VarBytes';
          end;
        ftAutoInc:
          begin
            sType := 'AutoInc';
          end;
        ftBlob:
          begin
            sType := 'Blob';
          end;
        ftMemo:
          begin
            sType := 'Memo';
          end;
        ftGraphic:
          begin
            sType := 'Graphicc';
          end;
        ftFmtMemo:
          begin
            sType := 'FmtMemo';
          end;
        ftParadoxOle:
          begin
            sType := 'ParadoxOlee';
          end;
        ftDBaseOle:
          begin
            sType := 'DBaseOle';
          end;
        ftTypedBinary:
          begin
            sType := 'TypedBinary';
          end;
        ftCursor:
          begin
            sType := 'Cursor';
          end;
        ftFixedChar:
          begin
            sType := 'FixedChar';
          end;
        ftWideString:
          begin
            sType := 'WideString';
          end;
        ftLargeInt:
          begin
            sType := 'LargeInt';
          end;
        ftADT:
          begin
            sType := 'ADT';
          end;
        ftArray:
          begin
            sType := 'Array';
          end;
        ftReference:
          begin
            sType := 'Reference';
          end;
        ftDataSet:
          begin
            sType := 'DataSet';
          end;
        ftOraBlob:
          begin
            sType := 'OraBlob';
          end;
        ftOraClob:
          begin
            sType := 'OraClob';
          end;
        ftVariant:
          begin
            sType := 'Variant';
          end;
        ftInterface:
          begin
            sType := 'Interface';
          end;
        ftIDispatch:
          begin
            sType := 'IDispatch';
          end;
        ftGuid:
          begin
            sType := 'Guid';
          end;
      end;
Wie gesagt, ist nur aus einem Programm rauskopiert.

TheMiller 17. Jul 2011 15:03

AW: Ist mein Programm jetzt wirklich Unicode? Trotz Umwandlung?
 
Hi.

Aber auch ein
Delphi-Quellcode:
ShowMessage(GetEnumProp(db.DBQuery.FieldByName('TITEL'), 'DataType'));
bringt die gleiche AV.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz