![]() |
Re: DBLookupBox und Integer
Zitat:
caste doch in deiner SQL-Abfrage den Integer in einen String. |
Re: DBLookupBox und Integer
Hi sharky,
das ist die erste Idee zu meinem Problem. Ich arbeite mit mysql und den mysqlDAC. Wie kann ich die Abfrage casten und dann die Box nutzen? Sollte ja mit der Query für die Lookupbox geschehen... |
Re: DBLookupBox und Integer
Hai barnti,
versuche es mal so:
SQL-Code:
SELECT cast(id AS char) FROM tabelle
|
Re: DBLookupBox und Integer
Hi Sharky,
ich werde mich mal gleich an die Arbeit machen... |
Re: DBLookupBox und Integer
Hi Sharky,
das ganze bedarf größerer Änderungen. Ich werde diese Woche nicht mehr dazu kommen. Ich melde mich nächste Woche bezüglich dieses Problems noch einmal. Danke erst einmal! |
Re: DBLookupBox und Integer
Zitat:
|
Re: DBLookupBox und Integer
Zitat:
Ich hab wohl komplett chinesisch verstanden... Ok, nachdem ich das mal ausprobiert hab, das ListField als IntegerField zu deklarieren, ist mir auch klar, was dein Problem ist! In der Tat eine komische Sache, aber irgendwie funzt das bei IntegerFeldern nicht mit der Tastatureingabe... Ich hab mich mal geguckt, warum das so ist. Tja, in der Komponente wird gesagt, dass das mit der Tastatureingabe nur funktioniert, wenn das Feld vom Typ String o.Ä. ist, aber nicht bei Integer. Nu gut, versuchen wir doch mal die Klasse etwas zu "modifizieren". Einfach in die Unit, wo du die TDBLookupComboBox hast folgende Zeile als erstes unter type:
Delphi-Quellcode:
Die Funktion definieren wir wie folgt (mit kleinen Änderungen aus TDBLookupControl übernommen):
TDBLookupComboBox = class(DBCtrls.TDBLookupComboBox)
procedure ProcessSearchKey(Key: Char); override; end;
Delphi-Quellcode:
Somit hast du - ok, auf etwas fiesem Weg - die Klasse überschrieben, ohne eine neue zu erstellen. Sie gilt allerdings nur innerhalb dieser Unit! Jetzt funktioniert die ganze Sache auch mit der Tastatureingabe.
uses
DB; var SearchTickCount: Integer = 0; procedure TDBLookupComboBox.ProcessSearchKey(Key: Char); var TickCount: Integer; S: string; CharMsg: TMsg; FListField: TField; FKeyField: TField; begin FListField := ListSource.DataSet.FindField(ListField); if (FListField <> nil) and (FListField.FieldKind in [fkData, fkInternalCalc]) and (FListField.DataType in [ftString, ftInteger, ftWideString]) then // <<--- hier hab ich ftInteger hinzugefügt case Key of #8, #27: SearchText := ''; #32..#255: if CanModify then begin TickCount := GetTickCount; if TickCount - SearchTickCount > 2000 then SearchText := ''; SearchTickCount := TickCount; if SysLocale.FarEast and (Key in LeadBytes) then if PeekMessage(CharMsg, Handle, WM_CHAR, WM_CHAR, PM_REMOVE) then begin if CharMsg.Message = WM_Quit then begin PostQuitMessage(CharMsg.wparam); Exit; end; SearchText := SearchText + Key; Key := Char(CharMsg.wParam); end; if Length(SearchText) < 32 then begin S := SearchText + Key; try if ListLink.DataSet.Locate(FListField.FieldName, S, [loCaseInsensitive, loPartialKey]) then begin FKeyField := ListSource.DataSet.FindField(KeyField); SelectKeyValue(FKeyField.Value); SearchText := S; end; except SearchText := S; end; end; end; end; end; |
Re: DBLookupBox und Integer
Hallo Sharky,
ich habe mir mal eben ein Testprogramm erstellt. Ich habe deinen Tip beherzigt und - es FUNKTIONIERT! Ich bin begeistert! Danke!Danke!... |
Re: DBLookupBox und Integer
Hi Stevie,
auch ein Weg. Ich bin am überlegen, ob das nicht sogar einfacher wäre. Aber ich weiß nicht, ob das nicht andere 'Sauereien' macht... Vielen Dank auch für Deine Geduld und Mühe! |
Re: DBLookupBox und Integer
Zitat:
Ok, die einzige Sauerei ist eigentlich, dass es schon etwas gegen die "Gesetze" der OOP verstößt, wenn ich die Kompo hier einfach "superclasse". :mrgreen: Ansonsten funktioniert das so, wie vorher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz