![]() |
Datenbank: FireBird • Version: 3.x • Zugriff über: ADO
Invalid Field Size bei TAdoDataset
Hallo zusammen,
nichteinmal ein einfaches Datenbank-Hallo-Welt ist mir vergönnt. :-( Ich habe ein riesiges Projekt ;-), mit einem Formular und einer Komponente und zwar TAdoDataset. Bei Connection-String steht meine, eingerichtete, Datenquelle drin, und bei CommandText SELECT * FROM MOO. Prüfe ich die Datenquelle mittels TAdoConnect, connected true, klappt die Verbindung. Setze ich nun mein AdoDataset1 auf active true kommt genau jene Fehlermeldung Invalid field size. Ich hab nicht mal was angegeben, geändert oder so, ich will nur einfach, dass er mir die Datensätze aus der Tabelle ausgibt..... Hiiiiilfe! Bitte! Herzlich grüßt Marco |
AW: Invalid Field Size bei TAdoDataset
Hallo,
das DataSet braucht eine Connection, also eine 2. Komponente. |
AW: Invalid Field Size bei TAdoDataset
Moin zusammen,
Die Nacht war kurz, aber Erfolgreich ;-). Ich verbinde mich (Delphi5), mittels ODBC zu einem Firebird-Server V3.0.7 - geht nicht, wie im 1. Post beschrieben. Nehme ich, alles Andere bleibt gleich, einen Firebird-Server V2.5.9 , ist alles schön. Gibt es zwischen V2.5 und V3.0.7 signifikante Unterschiede, ich brauche, denke ich, nur die SQL-Basics wie select, insert, update delete? Wenn ja, also wenn der FB3 z.B, viel schneller ist, kann ich irgendwie herausfinden, welche Anweisung der ODBC-Treiber schickt, die dem FB3 nicht passt? Herzlich grüßt Marco |
AW: Invalid Field Size bei TAdoDataset
Bei ADO nehme man:
TADOQuery und gebe dort in der Eigenschaft SQL das gewünschte Statement ein.
Delphi-Quellcode:
Den Connectionstring kann man auch bei der entsprechenden Eigenschaft der TADOQuery angeben, wenn man sowieso nur eine TADOQuery im Programm nutzen möchte. Alternativ kann man natürlich auch eine TADOConnection nehmen, über diese die Verbindung aufbauen und sie der entsprechenden Eigenschaft der TADOQuery zuweisen.
ADOQuery.Close;
ADOQuery.SQL.Text := 'select * from moo'; ADOQuery.Open; Es gibt also zwei Wege, um eine Verbindung zur Datenbank aufzubauen. Bei mir laufen Delphi 7, FireBird 3 über ODBC und TADO-Komponenten auf Windows XP problemlos. Wie ein Connectionstring aussehen kann steht hier: ![]() Minimalversion mal eben mit Delphi 7 zusammengedaddelt: Das Formular (DFM)
Delphi-Quellcode:
Quelltext:
object Form1: TForm1
Left = 192 Top = 107 Width = 188 Height = 165 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object ADOConnection1: TADOConnection Connected = True ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MOO' + ';Initial Catalog=MOO' Left = 48 Top = 16 end object ADODataSet1: TADODataSet Active = True Connection = ADOConnection1 CursorType = ctStatic CommandText = 'select * from moo' Parameters = <> Left = 48 Top = 64 end end
Delphi-Quellcode:
Die Verbindung zur Datenbank wird damit bereits in der IDE hergestellt und die Tabelle geöffnet, ohne Fehlermeldung.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} end. Solltest Du beim TAdoDataset bei der Eigenschaft FieldDefs etwas eingegeben habe, prüfe bitte, ob die dortige Eingabe mit dem Tabellenaufbau in der Datenbank übereinstimmt. Differenzen, zwischen den dortigen Eingaben und den tatsächlichen Definitionen auf Datenbankseite, führen zu dem von Dir genannten Fehler. |
AW: Invalid Field Size bei TAdoDataset
Huhu,
Genau so, wie du es beschrieben hast, hatte ich es auch. Die Verbindung zur DB klappt problemlos, nehme ich beim AdoDataset den integrierten SQL-Editor, zeigt er mir auch alle Felder, deren Typen und Längen korrekt an. Sobald ich allerdings, zum Ausprobieren, active auf TRUE setze kommt der beschriebene Fehler. An den FieldDefs hab ich nix gemacht, hab's auch nochmal von ganz forne begonnen, ist ja, im Moment ohnehin nur zum Lernen, weil ich sicherstellen wollte, nicht irgendwo,aus Versehen, Blödsinn eingegeben zu haben. Aber nix geht. Mach ich das Ganze mit FB2.5.9 funktioniert alls sofort und tadellos. Das gleiche gilt auch für AdoQuery, sobald ich active auf TRUE setze, rappelt es. Geht auch, wenn ich im Code adoDataset1.open; aufrufe. Herzlich grüßt Marco |
AW: Invalid Field Size bei TAdoDataset
Hallo,
ahn, FB3 geht nicht, FB2 geht. Dann sind die Treiber zu alt. |
AW: Invalid Field Size bei TAdoDataset
Zitat:
...probiere mal ZEOS. (bekennender ADO "Hasser" wegen reichlich Problemen in der Vergangenheit (Locate MSSQL z.B.) :oops:) |
AW: Invalid Field Size bei TAdoDataset
Hallo,
hier geht es um u.a. ODBC, also etwa sseeehr altes. Zitat:
Ob der ODBC-Treiber da Murks macht -> k.A. . Ich würde per Google mal wegen dem ODBC und "Tracing" der Befehle suchen. Und zuletzt: FB3 ist nicht unbedingt schneller als FB1 oder FB2. |
AW: Invalid Field Size bei TAdoDataset
Die Meldung "Invalid Field Size" kommt immer dann, wenn die Tabelle/Anfrage persistente Felder nutzt und sich die Felddefinitionen geändert haben, so dass die persistenten Felder nicht (mehr) mit den Datenbankfeldern übereinstimmen.
Also z.B. ein Feld bei der einen Datenbank INTEGER ist (32 Bit) und bei der anderen BIGINT (64 Bit). Oder ein VARCHAR-Feld hat bei der einen Datenbank 20 Zeichen und bei der anderen 30. Sowas in der Art. |
AW: Invalid Field Size bei TAdoDataset
Es kann zuweilen auch eine schlechte Idee sein, wenn man in der IDE bei den TADOConnections, den TADOQuerys, TADOTables oder sonstigen TADODataSet-Nachfahren Active auf True setzt.
Die Verbindung zur Datenbank sollte man frühestens im FormCreate herstellen, ebenso die TADODataSets ... erst frühestens dort öffnen. Der beschriebene Fehler kann (muss aber nicht) eine Folge davon sein (zumindest bei älteren Delphi-Versionen), dass in der IDE andere Bedienungen erfüllt sind, als zur Laufzeit des Programmes. Daraus folgt, dass dann zur Laufzeit des Programmes die Felddefinitionen ... nicht mit denen zur Entwicklungszeit von der IDE im Formular gespeicherten übereinstimmten müssen (Folgen daraus siehe: ![]() Ansonsten: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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 by Thomas Breitkreuz