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 08.05.2017, 08:05   #1
thomasreick
MOF User
MOF User
Standard MySQL - CopyFromRecordset liefert nur erste Spalte

Guten Morgen, ich weiß nicht ob die Frage hier richtig positioniert ist, da Excel / VBA 2013 mit im Speil sind.

Ich ziehe per VBA Daten aus einer StoredProcedure eines MySql-Servers um sie in Excel tabellarisch aufzubereiten. Call per Per SqlWorkbench liefert alle INhalte korrekt an.

Der VBA-Code (s.u.) liefert jedoch nur das erste Feld des Recordsets.

Der gleiche Code, mit anderem Prozedurnamen, liefert alle Felder.

Hat jemand Hinweise, wo ich suchen kann/muss.

Code:

Sub subReadFromMySqlProc()
'Create Variables
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim strConnection As String

'Initiate Variables
  strConnection = "Driver={" & drv & "};Server=" & svr & ";Database=" & udb & ";Uid=" & usr & ";Pwd=" & upw & ";"

'Establish Connection, Command and Recordset
  Set con = New ADODB.Connection
  Set cmd = New ADODB.Command
  Set rs = New ADODB.Recordset

'Get Data via ADODB-Connection and StoredProcedure(s)
With con
    .Open strConnection
  
    cmd.ActiveConnection = con
    cmd.CommandText = "spMeineProzedur"
      Set rs = cmd.Execute(, , adCmdStoredProc)
        With Worksheets("MeinBlatt").Cells(4, 1)
          .ClearContents
          .CopyFromRecordset rs
        End With
      rs.Close
      Set rs = Nothing
    .Close
  End With
  Set con = Nothing
  
  Worksheets("MeinBlatt").Activate
...Weiterverarbeitung, die problemlos funktioniert
  
End Sub

__________________

Vielen Dank

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

Du müsstest Dir die Recordseterzeugung, also die SP, näher anschauen. Die dem Recordset zugrundeliegende Abfrage definiert ja, welche Felder im SELECT-Teil sind und somit weitergegeben werden.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}
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 08.05.2017, 13:21   #3
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Eberhard, danke für deine Antwort,

die SP per call auf dem MySql-Server aufgeführt liefert alle Felder anstandslos.

Wie ich schon schrub(?!), eine andere SP als Recordset-Quelle wird auf gleichem Wege korrekt abgerufen...

Das Select der SP ist nachfolgend (die View beinhaltet zwar ein umfangreiches aber unkritisches und unkompliziertes UNION-Select):
Code:

BEGIN
set @ssql='SELECT MeineId, Nomenklatur, Feld3, Feld4, QualitativeComment, TheComment from MeineDb.vw_MeineView where MeineId not in (880000, 880001) order by MeineId;'; prepare stmt from @ssql; execute stmt; deallocate prepare stmt;
END
Noch eine 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 08.05.2017, 13:26   #4
ebs17
MOF Guru
MOF Guru
Standard

CopyFromRecordset macht nur das, was im Namen steht.

Gibt es im Excelsheet verborgene Spalten, die ein sichtbares Ergebnis verschlucken?

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}
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 08.05.2017, 16:23   #5
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

leider Nein....

Kann die "Laufzeit" (<0,2 sec) der SP etwas damit zu tun haben? Daß noch ncht alle Spalten im rs auf der VBA-Seite angekommen sind???
Ich stehe da vor einem Rätsel....

Hast du noch eine 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 08.05.2017, 16:46   #6
fraeser
MOF Meister
MOF Meister
Standard

Hast Du mal Range statt Cells probiert?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.05.2017, 16:53   #7
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo fraeser,

ja, habe ich auch schon ausprobiert, es kommt nur die erste Spalte an...

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 08.05.2017, 18:29   #8
ebs17
MOF Guru
MOF Guru
Standard

Code:

        With Worksheets("MeinBlatt").Cells(4, 1)
          .ClearContents
Das Inhalte-Löschen von genau einer Zelle irritiert mich. Was passiert da worin?

Ob das Recordset in Deiner konkreten Aktion enthält, würde ich explizit prüfen, also bspw. vor dem CopyFromRecordset ein
Code:

Debug.Print rs.Fields(1).Name, rs.Fields(1).Value

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}
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 09.05.2017, 10:52   #9
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Eberhard,

die von dir vorgeschlagene Prüfung habe ich per Schleife für alle Felder durchgeführt. rs(i).name und rs(i) werden korrekt wiedergegeben.

CopyFromRecordset will immer noch nicht.

Ich habe mich aber jetzt dazu durchgerungen das per Do-While-Not-rs.eof-Schleife Feld für Feld und Datensatz für Datensatz zu machen. Das funktioniert, ist aber weniger performant. CopyFromRecordset wäre schöner...

Es sind glücklicherweise nicht so viele Datensätze die transferiert werden müssen.



Danke für deine Hinweise.
Ich setze das Thema auf Erledigt, es sein denn du hast noch eine 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 09.05.2017, 12:01   #10
ebs17
MOF Guru
MOF Guru
Standard

Dein gezeigter Code ist ja in diesem Punkt korrekt (das Schließen einer vorhandenen Excelinstanz sowie das Nichtschließen des Recordsets würde ich bemängeln).

Daher wäre ein Test in der Form sinnvoll, ob CopyFromRecordset nur bei dieser Mappe, nur auf diesen Rechner oder generell nicht mehr funktioniert. Im zweiten Fall müsste man die Excelinstallation überprüfen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}
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 09.05.2017, 12:21   #11
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Eberhard,

der Workflow wird von Excel aus mit Command-Button ausgelöst und ...
  1. holt erst aus der DB mit CopyFromRecordset einen Schwung quantitativer Daten (Punktebewertungen (Fakten) zu Testfragen über mehrere Dimensionen).
  2. Aus diesen wird per VBA eine Pivot Tabelle zur Self-Service-Analyse aufgebaut.
  3. Anschließend werden aus der gleichen DB qualitative Kommentare gezogen, die ich ebenfalls mit CopyFromRecordset machen wollte. Das hat leider so nicht funktioniert.
Der für 3 verwendete Code sollte nur eine Kopie von 1 sein, nutzt aber eine andere StoredProcedure im MySql...
Hat halt so nicht sollen sein....

__________________

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.05.2017, 20:00   #12
fraeser
MOF Meister
MOF Meister
Standard

Also, ich habe es bei mir mal probiert:
[MS SQL Server, Excel 2010]

Klappt wunderbar mit CopyFromRecordset:

Code:

Public Sub sub_ReadRS()

Dim dbconR As New ADODB.Connection
Dim rsR As New ADODB.Recordset
Dim sqlR As String
Dim sheetR As Worksheet
Dim rangeR As Range

sqlR = "sp_WEB_hole_link_all"           'sp liefert 6 Spalten, n Zeilen

dbconR.Open SQLConnectString            'Verbindungsstring zum Server/DB

rsR.CursorLocation = adUseClient
rsR.Open sqlR, dbconR, adOpenDynamic, adLockOptimistic

Set sheetR = Sheets("Auslesen")         '"Auslesen" = Mappe
Set rangeR = sheetR.Cells(1, 1)

rangeR.CopyFromRecordset rsR

rsR.Close
Set rsR = Nothing
dbconR.Close
Set dbconR = Nothing

End Sub

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.08.2017, 14:04   #13
KarleKarleKarle
Neuer Benutzer
Neuer Benutzer
Standard

Hi,
dieses Problem habe ich aktuell auch.
Hat sich hier noch was ergeben?
Vielen Dank und Gruß.
KarleKarleKarle ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.08.2017, 19:19   #14
fraeser
MOF Meister
MOF Meister
Standard

Hast Du meinen funktionierenden Code aus #12 probiert?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser 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 02:52 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.