Prüfen wieviele Einträge in DB zur gleichen ID
-
Hallo
weiß jemand wie man sowas macht:
Und zwar stehen in meiner DB folgende Spalten
VersuchId und Zeit
1 5
1 10mit sowas bekomm ich immer den ersten Eintrag(
if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind!
{
sZeit = pRs2->m_szZeit;
}Wie kann ich dann prüfen ob es noch mehrer Eintrage zur gleiche Id gibt?
Wisst ihr wie ich das meine?
-
Frag doch einfach mit dem SQL-Statement immer den ersten Datensatz ab...
ansonsten sähe der Pseudo-Code ungefähr so aus
- Gehe zum ersten Datensatz
- Speichere Wert in Variable
- Vergleiche ab dem 2ten Datensatz den Wert mit dem gespeicherten wenn er gleich ist überspringe ihn
- Wenn er unterschiedlich ist Speichere den Wert in die Variabledies Setzt voraus das die Werte ASC/DESC geordnet sind!
Mfg
Disi
-
hi disi
erstmal danke für die HilfeFrag doch einfach mit dem SQL-Statement immer den ersten Datensatz ab
yup mach ich ja schon
- Vergleiche ab dem 2ten Datensatz den Wert mit dem gespeicherten wenn er gleich ist überspringe ihn
ne, der wert kann auch gleich sein (also die Zeit)
Also ich erklärs nochmal bisschen genauer
Ich habe 2 Tabellen: eine Versuchsdaten Tabelle mit folgeden Spalten VersuchId(AutoNumber) und Versuchsname(TEXT) und eine Flaechen Tabelle mit VersuchId(NUMBER) und Zeit(NUMBER)Wenn ich einen Versuchsnamen anlege, bekommt die ja automatisch eine Id mit (VersuchId) und in der Flaechen Tabelle steht die gleiche VersuchId und dann in der Zeitspalte z.B 10 . Der Wert wird dann in die sZeit Variable gespeichert
also so
if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind! { sZeit = pRs2->m_szZeit; }
nun kannes aber vorkommen ,dass zur gleichen Id mehrere Einträge geben kann
also
VersichId Zeit
1 5
1 10alles klar
-
Hi,
ich weiss ja nicht, was Du machst, wenn Du mehrere Einträge findest. Um alle Einträge zu finden, würde ich es etwas anders anfangen, als Du es gemacht hast:
pSt.Open(CRecordset::snapshot,sql_string); if (!pSt.IsBOF() && !pSt.IsEOF()) { pSt.MoveFirst(); do { // Mach irgendwas mit dem Record..... pSt.MoveNext(); } while (!pSt.IsEOF()); pSt.Close(); }
Ich hoffe, ich habe Deine Tabellennnamen nicht durcheinandergebracht - ich habe aus nem Programm von mir kopiert und editiert...
Gruss
yeti
-
hi
habs jetzt mal so gemacht, aber was müsste ich den in das if(..) reinschreiben?
if(!pSt.MoveFirst()) //Hier wird geprüft ob Datensätze drin sind! { if(???was muss da hin???) { sZeit = pRs2->m_szZeit; break; } }while(!pSt.MoveNext()); }
danke dir
(deins werd ich jetzt mal probieren)
-
ach ich hab das do noch vergessen
-
Hi,
die Frage ist: Wenn Du mehrere Einträge mit der gleichen (oder derselben ) ID findest, was willst Du dann machen? Den ersten, den letzten oder irgendeinen verwenden?
Gruss
yeti
-
okay, also wenn das klappen würde dann bekomm ich ja die Zeiten und die möchte ich dann später in eine WordVorlage durch ersetzen
In der Wordvorlage steht dann drinne
z.B
5 min
10 min
15 minaber am Anfang steht nur , da ich nicht weiß weviele Einträge in der DB vorhanden sind ,
verstehst du mich
-
Das klappt schon, wenn Du an der Stelle, an der mein Kommentar steht ("Mach was mit dem Record") die Zeiten irgendwohin stellst oder weiterverarbeitest (Um das genauer sagen zu können, müsste ich den Rest der Routine sehen).
Muss jetzt leider weg, es ist Freitag nachmittag. Vielleicht kann ich mich morgen nochmal einklinken.
Viel Erfolg + schönes WE
Gruss
yeti
-
okay, vielen dank
dir auch schönes WE
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du musst dich mit SQL beschäftigen. Wenn du die Anzahl wissen willst dann
SELECT count(id) FROM wasauchimmer GROUP BY id
Alle Datensätze geordner nach id
SELECT id FROM wasauchimmer ORDER BY id ASC
oder
SELECT id FROM wasauchimmer ORDER BY id DESCoder nur die mit einer bestimmten id
SELECT id FROM wasauchimmer where id = 1
-
hi
mmh, aber eigentlich ist doch egal wieviele Einträge ich hab , dass muss ich doch nicht wissen oder?
D.h das wird doch in der der schleife geprüft
d.h ich brauch dann die Werte (zeit)ich muss doch dann die Anzahl gar nicht wissen oder
kein Plan
danke
-
so passt dann
Lösung:
CStringArray sZeitArray; if(!pSt.MoveFirst()) { do { CString sTmp = pRs2->m_szVersuchId; CString sZeit = pRs2->m_szZeit; }while(!pSt.MoveNext()); }
danke
-
wenn du wissen willst wie oft eine id in der tabelle vorkommt
kannst du das mit
select id,count(*) from tabelle group by iddas gibt dir 2 spalten zurueck. die erste enthaelt die id und
die 2. die anzahl wie oft sie in der tabelle enthalten ist.
-
hi
ich habs jetzt so gemahct wie oben geschrieben und es klappt
trotzdem danke