| |
VB & DatenbankenSQL-Datenabgleich | | | Autor: CarpeDiem | Datum: 09.12.04 16:18 |
| Hallo,
ich bin am Ende meiner Weisheit
Ich habe ein RS das aus gefilterten Daten besteht (die Datensätze mit der größten Summenanzahl). Weiters ein zweites RS das mir Datensätze anzeigt, die Mehrfacheintragungen aus dem ersten RS anzeigt (hier erhalte ich allerdings nur die Mehrfacheintragung an sich und die Anzahl der Mehrfacheintragungen OHNE die restlichen Datenfelder)
Ich versuche nun schon seit einer Weile, RS 1 mit RS 2 dahingehend abzugleichen, dass ich die Mehrfacheintragungen mit allen Datenfeldern erhalte.
Den 1. Recordset erhalte ich mit:
sSql = "SELECT [Z1],[Z2],[Z3],[Z4],[Z5],[Z6] FROM [Irgendwas]"
sSql = sSql & "WHERE [Datum] >Now() -365" & "*" & cboYear.Text
sSql = sSql & " ORDER BY [Nr]" Den 2. Recordset erhalte ich mit:
sql = "SELECT Double, COUNT(*) FROM [Abfrage] GROUP BY Double HAVING COUNT(*)" & _
"> 1 ORDER BY COUNT(*) DESC, Double ASC" Der bisher vergebliche Abgleich, weil ich zwar jene gefilterten Datenfelder bekomme, die im 2. RS ausgeworfen werden, aber dafür alle doppelten etc. erfolgt mit:
qSql = "SELECT * FROM [Abfrage], [Doppler] WHERE [Abfrage.Double] =" & _
"[Doppler.Double]"
qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" Wenn ich DISTINCT einfüge:
qSql = "SELECT DISTINCT Double, * FROM [Abfrage], [Doppler] WHERE" & _
"[Abfrage.Double] = [Doppler.Double]"
'qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" weigert sich der Interpreter das zur Kenntnis zu nehmen (Fehler Nr. 3079, das angegebene Feld Double kann sich auf mehr als eine der Tabellen beziehen, die im FROM-Abschnitt der SQL-Anweisung angegeben werden)
Ich habe so ziemlich alle Möglichkeiten der Kombinatorik ausgeschöpft um das Problem zu lösen , bin aber mangels geeigneter Fachliteratur gescheitert.
Vielleicht kann mir jemand helfen wie dieses Problem zu lösen wäre.
Danke im Voraus | |
Re: SQL-Datenabgleich | | | Autor: e-dirk | Datum: 10.12.04 09:45 |
| moin,moin,
Die Fehlermeldung sagt -ausnahmsweise- genau was falsch ist:
"das angegebene Feld Double kann sich auf mehr als eine der Tabellen beziehen"
also entweder:
qSql = "SELECT DISTINCT Abfrage.Double, * FROM [Abfrage], [Doppler] WHERE" & _
"[Abfrage.Double] = [Doppler.Double]"
'qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" oder
qSql = "SELECT DISTINCT Doppler.Double, * FROM [Abfrage], [Doppler] WHERE" & _
"[Abfrage.Double] = [Doppler.Double]"
'qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" grüße
Dirk
PS: Du solltest versuchen den Feldnamen "Double" zu vermeiden, da das ein "Reserviertes" Wort ist: die bezeichnung für einen Datentyp. Manche DBMS mögen das nicht
PSS: Das Sternchen "*" gibt Dir [u]Alle Felder zurück. "Distinct" hat damit evtl keine Auswirkung, da es sich immer auf die ganze Zeile bezieht, und nur Identische Zeilen unterdrückt. Wenn Du z.B. eine Laufende Nr in deiner Tabelle hast kann eine Abfrage mit "*" keine identischen Zeile enthalten. | |
Re: SQL-Datenabgleich | | | Autor: CarpeDiem | Datum: 10.12.04 11:12 |
| Hi,
ich danke Dir recht herzlich für Deinen Tipp, der wie erwartet funktioniert!
Nur noch einige Worte zu Deinen Hinweisen.
Ich habe es nicht gewußt, dass Double ein "reserviertes Wort" ist. Wieder etwas dazugelernt.
Zu meiner Person möchte ich noch allgemein erwähnen, dass ich an VB-Programmierung mächtig interessiert bin, aber doch kein fundiertes Basiswissen, wie z.B. Studenten aufweise. Neidlos bewundere ich auch "Ausnahmeerscheinungen", die scheinbar mühelos, Quellcodes in den PC hämmern.
Bei meine Applikationen versuche ich, -manchmal vergeblich - etwas Professionalität hineinzubringen, die ausschließlich zum Privaten Gebrauch (Beruf) bestimmt sind. Bisher ist mir das halbwegs gelungen.
Um auf Dein PostpostSkriptum zurückzukommen: Ich habe wie Du vermutest, eine indexierte LfdNr., weshalb sich das Ergebnis von meinem ursprünglichen String nicht unterscheidet.
Was könnte ich also tun, um aus der QueryDef [Abfrage] nur jene Datensätze zu bekommen, die in der QueryDef [Doppler] einmal aufscheinen?
Herzliche Grüße | |
Re: SQL-Datenabgleich | | | Autor: e-dirk | Datum: 10.12.04 11:54 |
| moin,moin,
Du must alle, und zwar nur die, Felder, in denen Du nach Dopplungen suchen willst, in der Abfrage angeben.
Select distinct Feld1, Feld2, feld3, ... From... grüße Dirk | |
Re: SQL-Datenabgleich | | | Autor: CarpeDiem | Datum: 10.12.04 13:41 |
| Hallo,
entweder bin ich für diese Thematik zu blöd oder ich "stehe wie angeklebt auf der Leitung"
Wenn ich Dein erstes Beispiel:
qSql = "SELECT DISTINCT Abfrage.Double, * FROM [Abfrage], [Doppler] WHERE" & _
"[Abfrage.Double] = [Doppler.Double]"
'qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" in:
qSql = "SELECT DISTINCT Abfrage.Double, Abfrage.Z1 , Abfrage.Z2 , Abfrage.Z3 ," & _
"Abfrage.Z4, Abfrage.Z5 , Abfrage.Z6 , Abfrage.SumK, Abfrage.Sum3," & _
"Abfrage.Sum4, Abfrage.Sum5, Abfrage.Sum6 FROM [Abfrage], [Doppler] WHERE" & _
"[Abfrage.Double] = [Doppler.Double]"
'qSql = qSql & "ORDER BY SumK DESC, Sum3 DESC, Sum4 DESC, Sum5 DESC, Sum6 DESC" abändere bekomme ich wiederum einen Laufzeitfehler.
In der [Abfrage] - gibt es die genannten Datenfelder, in [Doppler] hingegen nur das Datenfeld Double.
Ich ersuche Dich nochmals um Unterstützung.
Herzliche Grüße | |
Re: SQL-Datenabgleich | | | Autor: e-dirk | Datum: 10.12.04 14:31 |
| moin,moin,
Äh? da stehe ich im Moment auch auf der Leitung.
Hast Du die Felder Sumk bis sum6 in der Abfrage?
ansonsten müsste ich mal deine Tabellen und Abfragen sehen.
Kannst Du mir die mal mailen?
grüße
Dirk | |
Re: SQL-Datenabgleich | | | Autor: CarpeDiem | Datum: 10.12.04 14:54 |
| Hallo,
ich sage vorerst Danke und sende Dir meine DB (~ 1,2 MB) plus Textfile mit entspr.Quellcode
Grüße | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|