Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler bei INSERT mit TADOCommand (https://www.delphipraxis.net/75575-fehler-bei-insert-mit-tadocommand.html)

Moony 21. Aug 2006 19:55

Datenbank: MS Access • Zugriff über: TADOConnection

Fehler bei INSERT mit TADOCommand
 
Hallo zusammen,

In einer Routine deklariere ich lokal eine Variable des Typs TADOCommand. Innerhalb dieser Routine werden zwei unterschiedliche Insert-Befehle auf zwei Tabellen innerhalb einer Datenbank ausgeführt (MS Access). Der erste BEfehl wird ohneProbleme durchgeführt, bei dem zweiten gibt es folgende Meldung:

Zitat:

Im Projekt xyz ist eine Exception der Klasse EOleException aufgetreten. Meldung: Das Feld ist zu klein für die Datenmenge, die Sie hinzufügen wollten. Versuchen Sie weniger Daten einzufügen....
Das zweite Problem ist, dass ich im MS Access in der Datenbank eine Abfrage gebaut habe mit der identischen Anweisung und evoila schon wird die Insert-Anweisung ausgeführt.

Demnach verstehe ich nicht was es in der Umgebung für ein Problem sein soll.

Die Anweisung sieht folgendermaßen aus:

Delphi-Quellcode:
  ...

  for i := 0 to ListView.Items.Count - 1 do
  begin
    myItem := ListView.Items.Item[0];
    SQL := 'INSERT INTO Tabelle1 (Feld1, Feld2, Feld3, Feld4, Feld5, ';
    SQL := SQL + 'Feld6, Feld7, Feld8) VALUES (';
    SQL := SQL + Wert1 + ', ''' + myItem.SubItems.Strings[0];
    SQL := SQL + ''', ''' + myItem.SubItems.Strings[1] + ''', ''' + myItem.SubItems.Strings[2];
    SQL := SQL + ''', ''' + myItem.SubItems.Strings[3] + ''', ''' + myItem.SubItems.Strings[4];
    SQL := SQL + ''', ''' + myItem.SubItems.Strings[5] + ''', ''' + myItem.SubItems.Strings[6] + ''')';

    Comm.CommandText := SQL;
    Comm.Execute;
  end;

  ...
Gruß, Moony

mkinzler 21. Aug 2006 20:00

Re: Fehler bei INSERT mit TADOCommand
 
Wie sind die Felder der Tabelle1 deklarier? Und wie lange sind ei Strings die eingefügt werden sollen?

Moony 21. Aug 2006 20:06

Re: Fehler bei INSERT mit TADOCommand
 
Der Feldeihenfolge wie oben aufelistet: Zahl(LongInt), Text(4), Text(4), Text(4), Text(10), Text(5), Zahl(LongInt), Text(5).

Habe das Problem gefunden. In das Feld mit der Feldlänge 5 wurde ein String mit 1 Zeichen mehr, sprich Länge 6 eingetragen. Aber wenn das zu Fehlern führt, warum hat dann Access direkt innerhalb der Abfrage keinen Fehler verursacht, sondern ganz in Ruhe den Datensatz hinzugefügrt?

mkinzler 21. Aug 2006 20:09

Re: Fehler bei INSERT mit TADOCommand
 
Zitat:

Aber wenn das zu Fehlern führt, warum hat dann Access direkt innerhalb der Abfrage keinen Fehler verursacht, sondern ganz in Ruhe den Datensatz hinzugefügrt?
Möglichweise trimmt Access Strings vor dem Einfügen auf die passende Länge.

Moony 21. Aug 2006 20:17

Re: Fehler bei INSERT mit TADOCommand
 
Das Leerzeichen war innerhalb des Strings, demnach weder am anfang noch am Ende des Strings. Und davon abgesehen wurde es ja so eingefügt wie innerhalb der Entwicklungsumgebung, ergo richtig übergeben & eingefügt, aber falsch nach den Feldlängendefinitionen. Alles sehr merkwürdig....... :gruebel:

Dennoch danke für den Denkanstoß...

mkinzler 21. Aug 2006 20:27

Re: Fehler bei INSERT mit TADOCommand
 
Zitat:

Das Leerzeichen war innerhalb des Strings, demnach weder am anfang noch am Ende des Strings.
Mit Trimmen meinte ich jetzt nicht das Entfernen von Leerzeichen am Anfang oder/und Ende des Strings( LeftTrim(), RightTrim(),Trim()) sondern das Abschneiden bei einer bestimmten Länge.

Moony 21. Aug 2006 20:47

Re: Fehler bei INSERT mit TADOCommand
 
Auch wen das der Fall ist, wurde der String in der vollen falschen Länge eingefügt. Ich habe es ja in der Tabelle überprüft was drin steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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