SQL und Access

FTUK

Grünschnabel
Also mein Problem besteht darin das ich Daten aus einem Query
nach Excel Exportieren moechte und das so schnell wie moeglich!

Das Exportieren an sich ist kein Problem funktioniert alles
aber die geschwindichkeit laesst zu wuenschen uebrich bei
einem Query das ueber 700'000 eintraege hat

darueberhinaus exportiere ich nach kriterien! also ein datensatz
wird nur dann exportiert wenn es den namen XXX hat und es kein doppeleintrag ist
und wenn es ein doppeleintrag ist soll ich den mit dem hoeheren wert x exportieren...

den namen waehle ich vorher ueber ein combobox aus was auch schon realiesiert ist...

hier mal der Quelltext zum export

Private Sub CMD_Export_Click()
Dim xlA As Excel.Application
Dim xlWb As Excel.Workbook
Dim DB As Database
Dim RS As Recordset

Dim Name As String
Dim CBName As String
Dim Kurs As Variant
Dim I As Long
Dim UmPHEK As Variant
Dim SN As Integer

Set xlA = New Excel.Application
Set xlWb = xlA.Workbooks.Add
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("ExportQuery")
' Alle Datensaetze durchgehen und mit namen aus cb vergleichen
' danach in Excel schreiben bei 64000 sheet wegseln
SN = 1
xlWb.Sheets(SN).Columns("A:J").NumberFormat = "@"
xlWb.Sheets(SN).Columns("A:J").ColumnWidth = 14

RS.MoveFirst
If CB_Select <> "" Then
CBName = CB_Select.Value
Else
MsgBox "You must choose an name," & Chr(13) & " Please Try Again", vbCritical, "ERROR"
Exit Sub
End If
' abfrage des wegselkurses
Kurs = InputBox("type in the course Euro-Pound", "course")
I = 1

While Not (RS.EOF)
Name = RS("PM").Value
If I > 64000 Then
SN = 2
I = 1
End If
If Name = CBName Then
' alles auslesen und PHEK berechnen und schreiben
UmPHEK = RS("PHEK").Value * Kurs
xlWb.Sheets(SN).Range("A" & I).Value = Name
xlWb.Sheets(SN).Range("B" & I).Value = RS("SNR").Value
xlWb.Sheets(SN).Range("C" & I).Value = RS("PH1").Value
xlWb.Sheets(SN).Range("D" & I).Value = RS("PH2").Value
xlWb.Sheets(SN).Range("E" & I).Value = RS("PH3").Value
xlWb.Sheets(SN).Range("F" & I).Value = UmPHEK
I = I + 1
End If
RS.MoveNext
Wend

xlWb.Close
End Sub
nun meine gedanken dazu .....
Ich glaube das es evt moeglich ist mit SQL vorher das querry
nach namen zu sortieren und dann zum ersten satz des namens springen
dann alle exportieren bis name sich aendert....

das mit denn doppelten kann man dann im normalen export abfragen...

oder gibt es noch andere moeglichkeiten viele daten mit einen schwung zu exportieren
 
da gibts schon einiges, was du tun kannst:

sortieren nach name mit hilfe einer "ORDER BY" klausel im sql-string (z.b. "SELECT * FROM [tabelle] WHERE [Bedingung] ORDER BY [Attribut]").

doppelte ergebnisse kannst du über gruppierung oder das DISTINCT schlüsselwort verhindern... die frage, die sich jetz stellt ist: wieviel ahnung hast du von sql-abfragen und wie sieht die eigentliche abfrage aus?!
 
Also was SQL angeht beschraenkt sich meine Ahnung auf 1 Semester Datenbanken
und die inhalte der vorlesungen.... dort haben wir so einiges gehabt nur sind
meine Gesamten unterlagen in Germany und ich Sitze hier in London
und muss mit meinen Eingestaupten errinerungen vorlieb nehmen....

also die logik von SQL verstehe ich nur eben die genauen befehle und abfragen
weiss ich nicht mehr... und schon garnicht wie man sie in Access VBA einbindet

das is der scheiss an unis man lernt nur die logik und fakten macht aber keine
praktichen bsp.

was die doppelantworten angeht sind nur 7 von 8 werten doppelt unterscheiden sich
nur von den preisen und ich soll die zeile mit dem hoechsten preis exportieren....

bsp

ware1 preis 6€
ware1 preis 5,50€
ware1 preis 7€
ware1 preis 6€
ware1 preis 5,50€

also soll ich ware1 preis 7€ in Excel schreiben rest nicht....
 
Zuletzt bearbeitet:
die sql-anweisung der abfrage "ExportQuery" wäre jetzt noch ganz hilfreich und denn können wir dir sicher gut weiterhelfen ;)
 
ExportQuery ist einfach nur ein Query von 2 Datenbanken
in einer DB stehen namen in der anderen stehen die daten
das beides is ueber eine art schluessel verknuepft so
das ich fuer jede zeile in der daten db einen namen habe


oder wenn du daraus schlauer wirst das ist die SQL abfrage

SELECT [PH1-KGF].PM, PHEK.SNR, PHEK.PH1, PHEK.PH2, PHEK.PH3, PHEK.PHEK
FROM [PH1-KGF] INNER JOIN PHEK ON [PH1-KGF].PH1 = PHEK.PH1;
 
gut, dass tabellen und attributsbezeichner selbsterklärende namen haben :-)

beispielhaft könnte die abfrage folgendermaßen angepasst werden:

SELECT [PH1-KGF].PM, PHEK.SNR, PHEK.PH1, PHEK.PH2, PHEK.PH3, MAX(PHEK.PHEK)
FROM [PH1-KGF] INNER JOIN PHEK ON [PH1-KGF].PH1 = PHEK.PH1
GROUP BY [PH1-KGF].PM, PHEK.SNR, PHEK.PH1, PHEK.PH2, PHEK.PH3
ORDER BY [PH1-KGF].PM;

nicht getestet... das ganze gilt unter der voraussetzung, dass das attribut "PHEK.PHEK" den preis darstellt, wenn nicht: MAX da weg und um den preis und die jeweiligen attribute in der group-by-klausel austauschen.

hope this helps...
 
die firma beschäftigt die leute wohl schon allein mit dem erraten des sinns eines attributs, was? :p

wenn du probs hast mit der anweisung, poste halt nochmal, ansonsten have fun damit...
 
nein eher mit autoteilen ;) BOSCH wenn das was sagt
und da muessen arme studenten wie ich sich mit riesigen Datenbanken rumschlagen um
denn Englaendern das leben leichter zu machen

was in Excel fuer mich 0 Problem ist nur Access und Sql is fuer mich ein wenig neuland ;)
aber thx

Berliner sind eben die nettesten lol (komme und studiere in berlin) wenn ich net in London bin :D
 
Zurück