Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Invalid Field Size bei TAdoDataset (https://www.delphipraxis.net/207077-invalid-field-size-bei-tadodataset.html)

Marco Steinebach 22. Feb 2021 20:13

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

hoika 22. Feb 2021 23:19

AW: Invalid Field Size bei TAdoDataset
 
Hallo,
das DataSet braucht eine Connection, also eine 2. Komponente.

Marco Steinebach 23. Feb 2021 06:41

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

Delphi.Narium 23. Feb 2021 09:57

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:
ADOQuery.Close;
ADOQuery.SQL.Text := 'select * from moo';
ADOQuery.Open;
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.

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: https://www.delphipraxis.net/1483279-post36.html

Minimalversion mal eben mit Delphi 7 zusammengedaddelt:

Das Formular (DFM)
Delphi-Quellcode:
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
Quelltext:
Delphi-Quellcode:
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.
Die Verbindung zur Datenbank wird damit bereits in der IDE hergestellt und die Tabelle geöffnet, ohne Fehlermeldung.

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.

Marco Steinebach 23. Feb 2021 17:28

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

hoika 24. Feb 2021 04:40

AW: Invalid Field Size bei TAdoDataset
 
Hallo,
ahn, FB3 geht nicht, FB2 geht.

Dann sind die Treiber zu alt.

haentschman 24. Feb 2021 05:35

AW: Invalid Field Size bei TAdoDataset
 
Zitat:

Dann sind die Treiber zu alt.
+ 1 :thumb:

...probiere mal ZEOS. (bekennender ADO "Hasser" wegen reichlich Problemen in der Vergangenheit (Locate MSSQL z.B.) :oops:)

hoika 24. Feb 2021 06:16

AW: Invalid Field Size bei TAdoDataset
 
Hallo,
hier geht es um u.a. ODBC, also etwa sseeehr altes.
Zitat:

Gibt es zwischen V2.5 und V3.0.7 signifikante Unterschiede
Ja, der (Schreib)-Zugriff auf die Systemtabellen ist nicht mehr erlaubt.
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.

Frickler 25. Feb 2021 18:13

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.

Delphi.Narium 26. Feb 2021 10:00

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: https://www.delphipraxis.net/1483857-post9.html).

Ansonsten: Firebird_ODBC_2.0.5.156_Win32 und Firebird 3.0.2 (in Kombination mit TADO... und Delphi 7) funktionieren bei mir absolut problemlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Seite 1 von 2  1 2      

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