![]() |
Datenbank: FireBird • Version: 1.5 • Zugriff über: UIB
Mit UIB Komponente Datensatz in FireBird Tabelle einfügen
Hallo,
ich versuche gerade mittels den UIB Komponenten einen Eintrag in einer Tabelle zu machen, bekomme jedoch immer Fehlermeldungen.
Delphi-Quellcode:
with TJvUIBquery.Create(nil) do
try DataBase := dmIntern.InternDB; Transaction := dmIntern.IBTransaction; SQL.Text := 'INSERT INTO kontakte (K_KONTAKTEID, ADRESSENID, ANSPRECHPARTNERID, ' + ' K_DATUMK, K_BEREICH, K_FEHLERKLASSE, K_ABGESCHLOSSEN, K_EIN_AUS, K_PUBLIC_PRIVATE, ' + ' K_ANLAGEN, PR_PRODUKTEID, KA_KONTAKTARTID, K_GELOESCHT, K_ZEIT, ' + ' K_VERRECHNET, TODO_SYSID, K_DRINGLICHKEIT_STR, K_UNTERBEREICH, ST_STATUSID) ' + ' VALUES(:K_KONTAKTEID, :ADRESSENID, :ANSPRECHPARTNERID, ' + ' :K_DATUMK, :K_BEREICH, :K_FEHLERKLASSE, :K_ABGESCHLOSSEN, :K_EIN_AUS, :K_PUBLIC_PRIVATE, ' + ' :K_ANLAGEN, :PR_PRODUKTEID, :KA_KONTAKTARTID, :K_GELOESCHT, :K_ZEIT, ' + ' :K_VERRECHNET, :TODO_SYSID, :K_DRINGLICHKEIT_STR, :K_UNTERBEREICH, :ST_STATUSID)'; Params.ByNameAsInteger['K_KONTAKTEID'] := lKID; Params.ByNameAsString['ADRESSENID'] := GetComboBoxID(ComboKunde, ComboKunde.ItemIndex); Params.ByNameAsString['ANSPRECHPARTNERID'] := GetComboBoxID(ComboAnsp, ComboAnsp.ItemIndex); Params.ByNameAsDateTime['K_DATUMK'] := now; Params.ByNameAsString['K_BEREICH'] := GetComboBoxID(ComboBereich, ComboBereich.ItemIndex); Params.ByNameAsString['K_FEHLERKLASSE'] := GetComboBoxID(ComboTODO, ComboTODO.ItemIndex); Params.ByNameAsInteger['K_ABGESCHLOSSEN'] := 0; Params.ByNameAsInteger['K_EIN_AUS'] := 0; Params.ByNameAsInteger['K_PUBLIC_PRIVATE'] := 0; Params.ByNameAsInteger['K_ANLAGEN'] := 0; Params.ByNameAsString['PR_PRODUKTEID'] := GetComboBoxID(ComboPRodukt, ComboProdukt.ItemIndex); Params.ByNameAsString['KA_KONTAKTARTID'] := GetComboBoxID(ComboKontaktart, ComboKontaktArt.ItemIndex); Params.ByNameAsInteger['K_GELOESCHT'] := 0; Params.ByNameAsDateTime['K_ZEIT'] := now; Params.ByNameAsInteger['K_VERRECHNET'] := 0; Params.ByNameAsString['TODO_SYSID'] := GetComboBoxID(ComboTodo, ComboTodo.ItemIndex); Params.ByNameAsString['K_DRINGLICHKEIT_STR'] := ComboDringlichkeit.Text; Params.ByNameAsString['K_UNTERBEREICH'] := Edit1.Text; Params.ByNameAsString['ST_STATUSID'] := GetComboBoxID(ComboStatus, ComboStatus.ItemIndex); ExecSQL; finally Free; end; Zitat:
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Hi,
ich vermute mal 2 Fehler: 1. Du arbeitest mit einer nicht vollständigen embedded FB-Installation oder einer nicht korrekt installierten Server-Version 2. Deine Datenbank hat eine andere Einstellung des Character-Sets als deine TUIBDatabase-Komponente zu 2.: In den Verbidnungseinstellungen der Komponente musst Du den selben CharacterSet einstellen wie du ihn bei der ERstellung der DB angegeben hast. Für deutschsprachige DBs empfiehlt sich ISO8859_1 zu 1.: Müsste ich erst mal wissen was Du hast (FBServer oder Embedded).... Grüße Lemmy |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Hallo,
3. Ein übergebener String-Wert (z.B. der des Edit) ist zu gross. Heiko |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Warum lässt du das Insert nicht vom Dataset selber erzeugen ? Dann müssten nur noch die Felder besetzt werden. Entweder mit DBEdits usw. oder eben mit FieldByName.
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Weil UIB keine BDE ist!!!!
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Was hat das mit BDE zu tun ? :shock: Gibts da keinen Dataset - Generator, Insert, Post usw. Befehle ?
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Aber auch dann hätte er das Problem, das die übergebenen Werte zu groß(lang) sind.
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Hätte er nicht ! Sind dem Dataset die Felder per SQL-Generator bekannt gegeben, dann reicht statt einer grausamen Din A 4 Seite Insert-Codes das hier :
Delphi-Quellcode:
DS.Insert;
DS.FieldByName ('..').As...; DS.Post; |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Hallo,
erstmal danke für die viele Antworten. Ich wollte einfach nur ein Insert Ding abschicken, daher keine Datenbankgebundenen Steuerelemente. Das Feld erlaubt übrigens eine Länge von 180 Zeichen, übergeben sind nur ein Bruchteil davon max 20. Bei der Datenbankverbindung habe ich es bei den Standardeinstellungen belassen, lediglich DatabaseName, Password und Username entsprechend ausgefüllt. Weiters ist SQLDialekt=3 und CharacterSet = csNone ... so waren die aber schon eingestellt. Auf dem Rechner, wo die Firebird Datenbank-Datei db.gdb liegt, läuft der Firebird Server mit Version 1.5. Verwendet wird die gds32.dll Welcher Zeichensatz bei Erstellung der DB angegeben wurde weiß ich nicht, die DB entstand vor meiner Zeit und war wohl in früheren Zeiten eine Interbase Datenbank. |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Stell mal das CharacterSet auf ISO8859_1.
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Hast du dir die Datenbank mal in einem Admin-Tools angesehen (Characterset).
Besteht die Möglichkeit das Strings länger sind als die maximale Länge der Felder? |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Was für Admin Tool könntest Du vorschlagen?
Verwende momentan den SQL Manager Lite for Interbase/Firebird Zulange sind die Felder sicher nicht, das was ich einfügen möchte habe ich überprüft, das müßte von den Längen her gesehen klappen. MagicAndre ... genau das hat geholfen. :) |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Schön, dass es geholfen hat :) Hatte damals (vor 4 Jahren) auch Ewigkeiten nach diesem Fehler gesucht. Als Admintool nehme ich immer die PersonalEdition vom IBExpert.
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
Delphi-Quellcode:
Ignorieren des Dataset-Generators bringt auch nicht viel. Ausnahme : komplett alles wir ignoriert. :mrgreen:
Params.ByNameAsInteger['K_KONTAKTEID'] := lKID;
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
Ist es eigentlich generell sinnvoll eine Abfrage zu erstellen nur weil man etwas einfügen möchte? Ich könnte mir vorstellen, dass das Laden der verfügbaren Datensätze wohl auch etwas Zeit braucht. Zumal ich die Datensätze überhaupt nicht benötige an der Stelle. Mit Params.ByNameAsInteger['K_KONTAKTEID'] := lKID setzt man einen Parameter mit dem Namen K_KONTAKTEID auf den Wert von lKID. |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Irgendwie kann man da TJvUIBQuery keine Felder hinzufügen, so wie mans beispielsweise bei einer TQUery oder TADOQuery machen würde.
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Query deutet immer auf die BDE hin. Gibts da keinen Nachfahren von TDataSet ? Guck mal in deinem Query, ob es da tatsächlich kein "Insert" gibt.
P.S.: was heißt : Felder hinzufügen ? |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Die in der JVCL enthaltene Version von UIB ist veraltet. Nimm lieber die Originalversion
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Ich habe die Version von
![]() genommen. Das ist doch die Originalversion oder? Ne da gibts nur ein Schreibgeschütztes Dataset ... also wohl nicht verwendbar. Die normale TJvUIBQuery ist kein Nachfolger von einem TDataSet oder TCustomDataset. |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Bin dem Link mal nachgegangen. Da steht :
Delphi-Quellcode:
Es ist also in etwa von TDataSet abgeleitet. Mich stört da aber das Custom. Deutet sehr auf viel eigene Arbeit hin. Sehr viele Compiler-Directiven sind vorhanden. Was ist {$IFNDEF UIBPEVERSION}
TJvUIBCustomDataSet = class(TDataSet)
oder : {$IFDEF HAVE_SYNEDIT} ? |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
Ich finds gut dass das der Teil mit Custom auf der linken Seite steht und nicht rechts ... wird also von einem vollständigen Dataset abgeleitet... Bei meiner Query kam das nicht vor, konnte allerdings nur im Quelltext schaun {$IFDEF HAVE_SYNEDIT} ... ist eine Compilerdirektive ... der Quellcode wird nur dann verwendet, wenn sie gesetzt ist, wahrscheinlich kann man so auch die Syn_Edit Requirements ausschalten. |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
|
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Was mich aber stutzig macht ist, dass neben dem TJvUIBDataSet in fett read only steht. Genauso liefert CanModify immer false zurück. Auch finde ich keine InternalPost Methode nur InternalOpen, InternalClose und was man sonst noch für den Lesenden Zugriff braucht.
Ich fürchte das was Du mir vorschlagen wolltest wird nicht funktionieren mit den UIB Komponenten. Wegen Installation ... Du hast Delphi 8 laut Deiner Signatur ... bin mir nit sicher dass die Komponenten auch für Delphi.NET gibt. Vorraussetzung ist aber ein korrekt installiertes SynEdit. (Habs mit der Compilerdirektive nur bei Delphi 7 Prof. geschafft es ohne zu installieren) |
Re: Mit UIB Komponente Datensatz in FireBird Tabelle einfüge
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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