vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
SQL-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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel