access datenbank mit borland builer verändern/anlegen
-
hab noch ein kleines problemchen für den späten abend:)
ich will jetzt in meiner dbgrid die gleichen produkte zusammenfassen und per count noch ne zusätzliche spalte die menge der gleichen produkte anzeigen
hab mir das so gedacht:
Form3->ADOQuery1->SQL->Clear();
Form3->ADOQuery1->SQL->Add("Select Produkt, Count(Produkt) AS Menge From DerInhalt Group by Produkt");
Form3->ADOQuery1->ExecSQL();funktioniert aber leider nicht... was mach ich falsch?
-
"funktioniert nicht" ist keine ausreichende Fehlerbeschreibung
-
Wird wohl an dem ExecSQL() liegen. Da gehört wohl eher ein Open() hin... Ansonsten siehe Linneas Post.
-
jaa sorry ihr habt recht;)
also ich möchte ja wie gesagt die produkte zählen und die jeweilige menge in der spalte menge ausgeben!
leider wir weder was gezählt noch was in der spalte menge ausgegeben:)versteht ihr jetzt?
warum muss ein open hin? bisher hat das mit dem exec immer problemlos funktioniert
-
Hallo
schau mal den Beitrag von Linnea an
naja, manchmal hilft ein Blick in die BCB-Hilfe...
da steht z.B. wann man ExecSQL() und wann Open() verwendetMfg
Klaus
-
habs geändert, funktoniert aber trotzdem nicht!!!
also nochmal mein problem:
ich habe eine tabelle, die wird mit neuen daten gefüttert.
jetzt habe ich noch eine tabelle, in der ich die gleichen produkte zusammenfassen will, die menge der gleichen zählen möchte und dann sie dann noch anzeigen!!!!!
wie muss ich da vorgehen?
ich muss 2 ado verbindungen herstellen oder?
dann muss ich es die eine tabelle(sortiert) auf einem dbgrid ausgeben das hab ich sogemacht:
from Derinhalt ist die tabelle in der alle gespeicherten produkte stehen(unsortiert)Form3->ADOQuerysortiert->SQL->Clear();
Form3->ADOQuerysortiert->SQL->Add("Select Produkt, Count(Produkt) AS Menge From DerInhalt Group by Produkt");
Form3->ADOQuerysortiert->Open();als fehler bekomm ich jetzt, dass er die tabelle derinhalt nicht findet! wie muss ich diese noch einbinden?!
ich schau mir gerade das tut durch, komm aber leider nicht weiter.
vielen dank im vorraus:)
-
mögliche Fehlerquellen:
- Tabelle existiert nicht oder wird anders geschrieben
- Fehler in der SQL-Syntax in Bezug auf Access
- ADOQuery ist nicht mit einer aktiven ADOConnection verbunden
- ADOConnection ist mit der falschen Datenbank verbunden (sind die beiden Tabellen in einer Datenbank?)du kannst ja das Query mal direkt im Access ausprobieren, wenns dort schon Fehler gibt trifft Punkt 1 oder 2 zu
noch ein Tip: bei dem SQL-Kommand fehlt die Sortierung (ORDER BY ...)
-
also ich hab 2 verschiedene datenbanken!
1: derinhalt (alle produkte unsortiert)
2: sortiert (in dieser tabelle sollen am ende die produkte sortiert, gezählt ausgegeben werden)also ich versuch mal zu erklären was ich gemacht hab:
1. adoconection hab ich auf die sortiert tabele gesezt
2. adotable connection auf adoconnection aus 1.
3. datasource hab ich bei connection auch die adoconnection aus 1. und als tablename die tabelle sortiert aus datenbank sortiert
4. query hab die adoconnection aus 1 eingetragenwenn ich 4 auf activ schalten möchten kommt ein fehler: eigenschaft sql fehlt! was bedeutet das?! was mach ich falsch?
als 5. hab ich noch ein dbgrid bei der ich bei connection die adoconnection von 1 eingetragen habe!
wenn ich jetzt das prog starte, kommt die tabelle, zeigt aber keinen inhalt sonder nur die überschriften
wie gesagt, ich bin totaler noob und arbete zurzeitnur mit euren tips und dem tut aus den faq... hoffe meine fehler sind nicht all zu blöde und ihr könnt mir vieleciht ien bischen helfen...
-
wie jetzt? zwei Datenbanken mit je einer Tabelle? Warum nicht beide Tabellen in einer Datenbank?
ein wenig Access-Kenntnisse solltest du schon haben wenn du damit arbeiten willst Datenbanke-FAQ
im Prinzip stimmt dein Vorgehen, allerdings nur für eine Datenbank, wenn du wirklich 2 hast brauchst du auch 2 ADOConnections
Otz110 schrieb:
wenn ich 4 auf activ schalten möchten kommt ein fehler: eigenschaft sql fehlt! was bedeutet das?! was mach ich falsch?
hast du im ADOQuery ein SQL-Kommando hinterlegt (Eigenschaft SQL im Objektinspektor)?
Otz110 schrieb:
wenn ich jetzt das prog starte, kommt die tabelle, zeigt aber keinen inhalt sonder nur die überschriften
ist denn in der Tabelle auch was drin?
-
also hab nochmal etwas ausprobiert:
hab jetzt nur eine datenbank mit 2 tabellen...
in der einen stehen immernoch alle produkte und die anderen soll immernoch die einzelnen produkte zusammengefasst anzeigen.
glaube jetzt stimmt mein sql code nicht ganz:
("Select Produkt, Count(Produkt) AS Menge From DerInhalt Group by Produkt ");
es funktioniert etwas aber nicht das was ich will.
wenn ich das prog ausführe zeigt es jetzt die anzahl der verschiedenen produkte und zeigt das produkt mit dem ersten bustaben im alphabet.das ist aber nicht der sinn meiner abfrage. ich möchte das es die gleichen produkte zusammenfasst und die anzahl der einzelnen produkte anzeigt!
also wenn ich in der tabelle folgendes stehen habe:
bier
bier
bier
wasser
bier
wasserdann soll das am schluss so aussehen
menge produkt
4 bier
2 wasservielen dank und noch einen schönen abend
-
keiner ne idee?!
-
Die Abfrage sollte so schon stimmen
Hast du die Abfrage mal im Access gemacht? Was kommt dort raus?
-
hmm im acces funktioniert es genau so wie ich es haben möchte:(
ich glaub ich hab da noch was mit dem query falsch
meinst du könntest mir da nochmal einen tipp geben?!
ado connection hab ich auf der datenbank mit beidentabellen.
ado table bei connect auf die adoconnection
datasource hat die adotable eingetragen und als tablename die tabelle derinhalt in der alle produkte aufgelistet sind!
und das query hat die datasource eingetragen und die tabelle produkt, in der am ende die geordneten produkte stehn sollen!bei dem query hab ich aber die sql anweisung nicht eingetragen, da ich sie durch eine btnclick ausführe!!!
angezeigt bekomm ich immer noch die gesammt anzahl verschiedenen produkte hinter dem produkt mit dem ersten bustaben aus dem alphabet!
proukt menge
bier 7
hoffe du kannst meinen fehler finden! hab langsam kein bock mehr:)
-
wenn du genau das gleiche SQL-Kommando im ADOQuery wie im Access verwendest sollte das eigentlich auch genau das gleiche Ergebnis liefern
kannst ja dein Projekt (Quellcode und Datenbank) mal irgendwo hochladen, damit mal einer testen kann (wenn möglich nicht als rar)
Was ich noch nicht ganz verstehe ist das mit dem
die tabelle produkt, in der am ende die geordneten produkte stehn sollen
da meist das SQL-Kommando die Sortierung bestimmt und nicht die Tabelle. Die meisten Datenbanken tragen die Werte irgendwie ein und selbst mit einem fortlaufenden Index (Autoincrement) heißt das nicht, dass bei einfacher Ansicht der Tabelle die Daten nach dem fortlaufenden Index sortiert/anzeigt werden.
-
ok das werd ich morgen früh mal machen!!!
danke für die hilfe
-
hab hier mal einen auszug hochgeladen:
(wie gewünscht, nicht als rar sondern zip:))
-
also nochmal als Kochrezept:
1. ADOConnection auf die Datenbank einstellen
2. ADOQuery mit der ADOConnection verbinden
3. DataSource mit dem ADOQuery verbinden und zwar so dass das ADOQuery im DataSource ausgewählt wird, nicht anders rum
4. das DataSource mit dem DBGrid verbinden
5. im ButtonClick steht dann:Form1->ADOConnection1->Connected=true; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("Select Produkt, Count(Produkt) AS Menge From DerInhalt Group by Produkt"); ADOQuery1->Open();
und so funktionierts bei mir einwandfrei
-
ahhhhhhhhhhhhhhh wunderbar....
so funtioniert es wie ich es will:)
benötigt man die adotable dann nicht?
hab mich an so ne unterlage von meinem leher gehalten undn och bischen dazugedichtet:)
vielen dank
-
Hallo
Entweder TADOTable oder TADOQuery, wobei nur T...Query SQL-Abfragen ausführen kann. T...Table ist nur selten brauchbar.
bis bald
akari
-
hab jetzt ne neue fehlermeldung von einem teil, der die ganze zeit funktioniert hat:(
adoquery1 commandtext gibt keine ergebnismenge zurück
was sagt mir der fehler?!das ist die query, die bei meinem alten fehler auf die adoconnection gesetz wurde!
kann eine query nicht doppel "angewählt" werden?!
ok funktioniert!!!!!!!!!!!! sorry tippfehler von mir:)