MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 06.10.2016, 13:16   #1
thomasreick
MOF User
MOF User
Standard T-SQL : MSSQL 2012 - Datenimport über Access FE in MS-SQL2012 BE

Hallo zusammne,
Konstellation: MS-SQL-Server 2012, MS-Access 2013 (64 bit, ja ich weiß...)
Verbindung mittels ODBC, Servertabellen eingelinkt.

Ich benutze MS-Access 2013 um einen manuellen Import von XLS-Dateien in eine DB auf einem MS-SQL-Server 2012 anzustoßen.
Lokal klappt das auch problemlos. Der Prozeß in der Prouktivversion (also der INSERT INTO...) lädt aber faktisch keine Daten in die Zieltabelle.

Die Datenquelle im Access ist eine Abfrage ("qimp"), deren SQL auf eine XLS/XLSX/XLSM Tabelle per SELECT-Statement zugreift.

Mein INSERT Statement (gekürzt):
Code:

Private Sub....
...
    ssql = "INSERT INTO MeineServertabelle ( [Feld1], [Feld2], [Feld3]) " & _
            "SELECT qimp.Feld1, qimp.Feld2, qimp.Feld3 FROM qimp;"

currentdb.execute ssql
end sub
Hat bitte jemand einen Tipp, woran das liegen könnte? Ich vermute Rechteproblematik, wobei der Zieluser dbo-Rechte haben soll....

Ich habe keinerlei Ownership o.ä. an der Produktivversion

__________________

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.10.2016, 15:13   #2
ebs17
MOF Guru
MOF Guru
Standard

Code:

currentdb.execute ssql, dbFailOnError
Als erstzes würde man die Anzeige von möglichen Fehlern ermöglichen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.10.2016, 16:42   #3
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Eberhard,

danke für den ersten Hinweis. Das "unverständliche" für mich ist, daß es bei mir lokal anstandslos funktioniert, ich also trotz dbFailOnError keinen Hinweis bekomme.

Ich bin eben während einer Lync-Telko mit dem zuständigen SQL-Server-Mann dahintergekommen, daß der SQL-String bei Ausführung aus dem Access-Abfrageentwurf Typumwandlungsfehler meldet. Da haben wir allerdings auch vorher bei der Tabelleneinbindung einen kombinierten Schlüssel erzeugt...

Hast du eine weitere Idee?

__________________

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.10.2016, 00:34   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

Typumwandlungsfehler

Gibt es denn Unterschiede in den Datentypen zwischen MeineServertabelle und qimp?

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.10.2016, 11:18   #5
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Hans-Christian,

wie weiter oben beschrieben, ist

Code:

qimp.sql="SELECT * 
FROM [MeinExcelBlattUndZellbereich] 
IN 'MeinPfadZu\MeinerExcelDatei.xlsx'[Excel 12.0;HDR=Yes;IMEX=0;];"
Auf dem SQL sind alle Zielfelder bis auf eins von "MeineServertabelle" als NVARCHAR(255), NULL deklariert. Das eine abweichende Zielfeld ist eine Datumsangabe, die als datetime2(0), NULL deklariert ist. Diese Datentypen sind so durch die As-Is- Migration aus Access enstanden. An denen soll erst einmal nix verändert werden...

__________________

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.01.2017, 20:13   #6
Eisbergle
Neuer Benutzer
Neuer Benutzer
Weiter

ich denke mal, dass das das gleiche Problem ist, das ich heute hatte.
im Test funktioniert in der Praxis nicht


Kurzform:
zuerst TransferSpreadsheet, Zieltabelle alles nvarchar(max)
.. Typumwandlungsfehler in Zeile 55, Feld ABC

dann das ganze per Recordset eingelesen und Feldweise untersucht. Siehe da, gleicher Fehler. In Excel steht in dem Feld Text und das soll es auch.

also weitergesucht mit Import-Assistent getestet. Mal bis zu dem Datensatz scrollen, der den Fehler verursacht. Siehe da: Vorschau 20 Zeilen.

Mir schwante etwas. Die Zeile 55 war das erste Zeile in der diese Spalte befüllt war. Im weiteren bewahrheitete sich meine Vermutung: Der Import entscheidet anhand der ersten Zeilen um welchen Datentyp es sich bei den einzelnen Spalten handelt. Da die Spalte nicht gefüllt war, gehen die ganzen Import-Funktionen davon aus, dass es sich dann um eine numerische Spalte handelt.

Lösung:
in Access (z.B. mit doCmd.TransferSpreadsheet):
1. beim Einlesen der Excel-Datei(en) in eine Import-Tabelle die erste Zeile NICHT als Header behandeln. Somit ist die erste Zeile in allen Spalten mit TEXT gefüllt. Achtung: Spalten-Namen F1 bis Fnn

ab hier am besten weiter als StoredProcedure Aufruf über Access:
2. in der Import-Tabelle Überschrift-Zeile(n) löschen
DELETE ImportTable WHERE F1 LIKE 'UebSpalte1'

2. Umwandeln numerischer und formatierter Spalten in Text-"Zahlen". Hier z.B. Spalten F3 und F4:
UPDATE dbo.ImportTable SET
[F3] = RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([F3],'.',''),'/',''),'%',''),',','.'))
,[F4] = RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([F4],'.',''),'/',''),'%',''),',','.'))

3. %-Spalten durch 100 dividieren. Hier z.B. obige Spalte F4UPDATE dbo.ImportTable SET [F4] = CAST(CAST([F4] AS FLOAT) /100 AS NVARCHAR)

4. anschließend kann die ImportTabelle in die ZielTabelle kopieret werden.
INSERT INTO [dbo].[Zieltabelle](
[Feld1], [Feld2], [Feld3], [Feld4]
)
SELECT [F1], [F2],
CAST([F3] AS FLOAT),
CAST([F4] AS FLOAT)
FROM dbo.ImportTable

Hoffe das konnte ein Denkansatz mit Lösung sein
Eisbergle ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.01.2017, 19:09   #7
Grinface
MOF User
MOF User
Standard

Moin,

ich bin gerade bei dem gleichen Problem. Ich habe die importierten Daten in einer lokalen Access Tabelle und möchte sie von da aus in die SQL Server Tabelle schreiben.
Das macht die Append-Query auch, nur unsäglich langsam. Ich habe das Gefühl, das jede Datensatz einzeln geschrieben wird, dann eine Bestätigung kommt und dann der nächste Datensatz geschrieben wird.

Ich habe mir einen Workaround gebaut, der jeweils Happen von 1000 Zeilen überträgt (siehe hier)
Leider bricht die Routine nach ca. 4 Sekunden und 15000 geschriebenen records mit einer Fehlermeldung 3146 ODBC Call failed ab.
Auch wenn ich den Treiber von ODBC zu OleDB wechsel, exakt das Gleiche; immer nach 15000 Datensätzen ist Ende.

Ich habe auch schon mit den Timeout Einstellung gespielt, macht aber auch keinen Unterschied.

Hat noch jemand eine Idee?

Grinface
Grinface ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.