Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQL Abfrage mit DoCmd.RunSQL und Cstr in SQL-Query

Begonnen von Hans40, Februar 02, 2011, 15:07:53

⏪ vorheriges - nächstes ⏩

Hans40

Hallo,

momentan stehe ich mit dem CStr Kommando etwas daneben und brauche mal einen Tip...
oder vielleicht geht das gar nicht mit DoCmd.RunSQL zusammen ?
Das Ziel sollte sein, mit SQL eine Zahl einzulesen und dann nach "Text" zu konvertieren und in
eine Access Tabelle zu speichern. Die Tabelle kann ich nicht ändern, auch wenn es eine einfach Lösung wäre ;-)

Erklärung:
T_Sto ist eine Tabelle in Acces
NE_Index ist als TEXT deklariert ( soll auch so bleiben)
Excel_Tabelle ist eine Verknüpfung zu einem Excelfile mit meinen Daten
In Tabelle1.NE_Indes stehen nur Zahlen.

Ich führe nun folgenden Befehl aus:
DoCmd.RunSQL "INSERT INTO Verwaltung  ( NE_Index ) SELECT CStr(Tabelle1.NE_Index) FROM Excel_Tabelle ;"


Als Fehlermeldung bekomme ich Laufzeitfehler3349 Überlauf bei umerischem Feld.
Anscheinend funktioniert das casten so nicht... aber wie dann ?

Kann mir das bitte jemand erklären ?

DF6GL

#1
Hallo,

hast du überhaupt die richtige Zieltabelle erwischt?


Wieso gibst Du "Tabelle1" als Qualifizierer der Tabelle "Excel_Tabelle" an?


Irgendwie kommt mir das etwas durcheinander vor...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

database

#2
Hallo,

wie DF6GL schon angesprochen hat:

SELECT CStr(Tabelle1.NE_Index) FROM Excel_Tabelle;

KANN NICHT stimmen!

Lese das Feld NE_Index aus der Tabelle1 von der Excel_Tabelle    klingt nicht nur vollkommen unsinnig - ist es auch!

Also entweder Tabelle1.NE_Index From Tabelle1   oder  Excel_Tabelle.NE_Index FROM Excel_Tabelle  oder vielleicht doch T_Sto.NE_Index FROM T_Sto ?


ZitatAnscheinend funktioniert das casten so nicht... aber wie dann

Welchen Felddatentyp verwendest du für Verwaltung.NE_Index ? Zahl ? Integer (32767 = maximaler Wert!)? und wie lautet ein Eintrag aus  ???.NE_Index  (dem Textfeld)?
Wenn die Einträge im Textfeld einem höheren Zahlenwert als 32767 entsprechen MUSST du NE_Index in der Tabelle Verwaltung auf Long Integer deklarieren (IMMER statt Integer)!

Hans40

Hallo,

also T_Sto.NE_Index ist ein Textfeld und in Tabelle1.NE_Index ist ein long integer steht zb. 12_34.
Solange diese Format eingehalten wird funktioniert alles prima.Aber es gibt auch Ausnahmen.
Dann steht in Tabelle1.NE_Index nur 1234 ( ohne _ oder sonstige zeichen)

Ich habe hier mal meinen SQL String korrigiert. Er sieht nun so aus und funktioniert, solange
das "richtige" Format eingehalten wird.
DoCmd.RunSQL "INSERT INTO T_Sto (NE_Index) SELECT Tabelle1.NE_Index FROM Tabelle1 ;"

Trifft diese Abfrage jedoch auf 1234 kommt es zur Fehlermeldung "Laufzeitfehler 3349 Überlauf bei numerischen Feld" Wieso ?

Dann kam ich auf die Idee der Typumwandlung. Also hab ich den SQL String wie folgt angepasst:
DoCmd.RunSQL "INSERT INTO T_Sto (NE_Index) SELECT CStr(Tabelle1.NE_Index) FROM Tabelle1 ;"
Ergebniss:  Gleiche Fehlermeldung wir zuvor !


Daher meine Frage: Geht das mit der Typumwandlung überhaupt so wie ich es mir vorstellen ?
Das Problem sitzt bekanntlich immer vor dem Bildschirm ;-)

Dank im voraus
Hans

database

Hallo,

also ich krieg das nicht ganz auf die Reihe - 12_34 kann doch kein Eintrag in einem Long Integer-Feld sein!
Da simmt doch irgendwas gewaltig NICHT

Lass mal deine DB mit ein paar Musterdatensätzen (Spieldaten) anschauen (komprimieren/reparieren und dann zippen und hochladen)

MzKlMu

Hallo,
es könnte sein, dass das Indexfeld ein Format oder ein Eingabeformat (00_00) hat.
Dann wird auch Long Integer so dargestellt. Wobei die Betonung auf dargestellt liegt. Gespeichert wird ohne den Unterstrich.
Und da liegt der Hund begraben.
Meiner Meinung nach ist Cstr() gar nicht erforderlich, bzw. führt hier zu dem Fehler, da ja eine Zahl erwartet wird.

PS:
Ich würde generell auf Formate in den Tabellen verzichten.
Formatiert wird dann, wenn man es braucht, nämlich in Formularfeldern und Berichtsfeldern.
Gruß Klaus

Hans40

Hi,

ich versuche mal eine db mit dem Problem nachzubauen... wird eine zeitlang dauern.
Die Tabelle1 ist mit einem Excel file verknüpft und in der erwarteten Excelzelle
steht 12_34. Leider steht auch mal 1234 drin. Dann beginnen die Problem.
Long Integer war natürlich quatsch.. habe wieder zuviel gleichzeitig gemacht  >:(

Wer kann mir erstmal sagen ob ein Typenumwandlung von Interger nach String in SQL überhaupt machbar ist ?

Danke
Gruß
Hans

database

Hallo,

ZitatWer kann mir erstmal sagen ob ein Typenumwandlung von Interger nach String in SQL überhaupt machbar ist ?

In diese Richtung (von Zahl nach Text) JA umgekehrt KANN es zu Problemen kommen

Hans40

Zuerst mal Danke an alle die mir hier geschrieben haben.

Das Problem habe ich jetzt gelöst.
wie ich am Anfang geschrieben habe, liegen die Werte in einem verkmüpften Excelfile und da liegt im
eigendlichen Sinne der Hund begraben. Ich habe die Kollegen, die das Excelfile erstellen,
überzeugt das das Feld NE_Index eindeutig sein muß. Also nicht einmal 12_34 und dann mal wieder
1234. Das geht schief !
Die Lösung ist in meinen Falle ein Präfix wie z.b. #12_34, #1234. Jetzt ist alles klar für DoCmd.RunSql.
Funktioniert prima

Gruß
Hans

P.S. Wie kann ich hier das Thema als gelöst markieren ?
 

database

Hallo,

somit steht aber auch fest, dass es sich beim Zielfeld nicht um ein Long Integer sondern um ein Textfeld handelt.

Lösen kannst du in DEINEM ersten Beitrag indem du auf das spitzgestellte Quadrat neben dem Thementitel klickst.

Hans40

Hi,

ja, beim Zielfeld hast Du recht... aber es war von meiner Seite auch so gewünscht.
Nur das in der Exceltabelle nicht immer "text" stand sonder auch mal ein "interger"
war von mir nicht gewünscht. Aber wie gesagt, habe das Problem lösen lassen ;-)

Das mit dem spitzgestellten Quadrat funktioniert nicht. Geht das als Gast überhaupt ?
Oder mach ich was falsch wenn ich zu meinen ersten Beitrag gehe ?

Gruß
Hans

database

Hallo,

ZitatGeht das als Gast überhaupt
sorry, nein, das habe ich übersehen.