![]() |
Datenbank: Access • Version: *.mdb • Zugriff über: ADO
Query aus DBEdit-Fledern bauen...
Hallo zusammen!
Ich habe 2 TDBEdit-Felder und möchte die wörter, welche dort eingetragen werden, über ein Query in die DB schreiben (via Buttonclick). ADO-Connection ist bereits erstellt. Aber ich bekomme das irgendwie nicht gebacken! Hier mein Versuch:
Delphi-Quellcode:
procedure TvocabEingabe.Button1Click(Sender: TObject);
begin QRY_InsertVocab.SQL.Add(INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ('+Vok_Deutsch2+', '+Vok_Englisch2+')'); end; MFG eXpli |
Re: Query aus DBEdit-Fledern bauen...
Zitat:
Delphi-Quellcode:
[pre]
procedure TvocabEingabe.Button1Click(Sender: TObject); begin QRY_InsertVocab.SQL.Add('INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ('+quotedstr(Vok_Deutsch2.text)+', '+quotedstr(Vok_Englisch2.text)+');'); end; [/pre] |
Re: Query aus DBEdit-Fledern bauen...
Delphi-Quellcode:
[Edit: Tippfehler entfernt]
QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ( :Vok_Deutsch2, Vok_Englisch2);';
... QRY_InsertVocab.ParamByName( 'Vok_Deutsch2').Value := Vok_Deutsch2; QRY_InsertVocab.ParamByName( 'Vok_Englisch2').Value := Vok_Englisch2; QRY_InsertVocab.ExecSQl; |
Re: Query aus DBEdit-Fledern bauen...
sollte doch so heissen:
Zitat:
|
Re: Query aus DBEdit-Fledern bauen...
Zitat:
|
Re: Query aus DBEdit-Fledern bauen...
Muss ich jetzt den:
Delphi-Quellcode:
oder den Code nehmen?:
QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ( :Vok_Deutsch2, Vok_Englisch2);';
Delphi-Quellcode:
Habe bisher nur ADO-Connection und die QRY komponenten im einsatz... Brauch ich noch andere kompos dafür?
QRY_InsertVocab.ParamByName( 'Vok_Deutsch2').Value := Vok_Deutsch2.text;
QRY_InsertVocab.ParamByName( 'Vok_Englisch2').Value := Vok_Englisch2.text; QRY_InsertVocab.ExexSQl; |
Re: Query aus DBEdit-Fledern bauen...
Beides. Oben setzt du die Abfrage mit Parametern.
Im unteren Teil setzt du die Parameter und fühsrt die Abfrage mit deren Werten aus. |
Re: Query aus DBEdit-Fledern bauen...
ähm... nur so am Rande:
SQL-Code:
sieht irgendwie besser aus ;) nicht, dass sich jmd wundert, dass der 2.Parameter nicht gefunden wurde/wird/unbekannt ist :wink: also nix für ungut @mkinzler... is sicher 'n kleiner Flüchtigkeitsfehler ... kann ja jedem mal unterlaufen, gell?
QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ( :Vok_Deutsch2, :Vok_Englisch2);';
|
Re: Query aus DBEdit-Fledern bauen...
Und dann bitte noch ExecSQL und nicht ExexSQL ;-)
|
Re: Query aus DBEdit-Fledern bauen...
Ist's eigentlich egal, ob ich die Werte über DBEdit oder normale Edit-Boxen reingeb?
|
Re: Query aus DBEdit-Fledern bauen...
Grundsätzlich ja. Im 2. Fall musst du dich aber selber um das Einfügen in die DB kümmer
|
Re: Query aus DBEdit-Fledern bauen...
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm irgendwie will das nicht funtionieren :(.
So hab ich das jetzt:
Delphi-Quellcode:
Hier der ConnectionString:
ADOConnection1.Connected := true;
QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ( :Vok_Deutsch, :Vok_Englisch);'; QRY_InsertVocab.ExecSQL; ADOConnection1.Connected := false;
Delphi-Quellcode:
Hier als was die DBEditBoxen definiert:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Vokabeln.mdb;Persist Security Info=False
Delphi-Quellcode:
Fehlen mir vllt. noch andere kompos oder so? Hmm hier mal nen screeny vllt. fällt euch was ein wie ihr das machen würdet...
Vok_Deutsch: TDBEdit;
Vok_Englisch: TDBEdit; |
Re: Query aus DBEdit-Fledern bauen...
Diese Zeile kannst du woanders setzen, da sie nur einmal nötig ist.
Delphi-Quellcode:
QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ( :Vok_Deutsch, :Vok_Englisch);';
Delphi-Quellcode:
Jetzt verstehe ich deine letzte Frage: In diesem Fall wäre ein normales Edit sogar besser
ADOConnection1.Connected := true; //Warum?
//Hier die werte in die Parameter schreiben: QRY_InsertVocab.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.ParamByName('Vok_English').Value := Vok_English.Text; QRY_InsertVocab.ExecSQL; ADOConnection1.Connected := false; //Warum? |
Re: Query aus DBEdit-Fledern bauen...
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm woll immer noch nicht so richtig...
hier mal meinen gesamten Code:
Delphi-Quellcode:
jetzt kommt noch ne Fehlermeldung - siehe Anhang:unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Mask, DBCtrls; type TVocabEingabe = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; Vok_Deutschnn: TDBEdit; Vok_Englischnn: TDBEdit; ADOConnection1: TADOConnection; QRY_InsertVocab: TADOQuery; Vok_Deutsch: TEdit; Vok_Englisch: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; // TVokabel = record // Vok_Deutsch: string; // Vok_Englisch: string; // end; var VocabEingabe: TVocabEingabe; implementation {$R *.dfm} procedure TVocabEingabe.Button1Click(Sender: TObject); begin // QRY_InsertVocab.SQL.Add('INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES ('+quotedstr(Vok_Deutsch2.Text)+', '+quotedstr(Vok_Englisch2.Text)+');'); //QRY_InsertVocab.Parameters.ParamByName( 'Vok_Deutsch').Value := Vok_Deutsch2.Text; //QRY_InsertVocab.Parameters.ParamByName( 'Vok_Deutsch').Value := Vok_Deutsch2.Text; //QRY_InsertVocab.ExecSQL; QRY_InsertVocab.Parameters.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.Parameters.ParamByName('Vok_Englisch').Value := Vok_Englisch.Text; QRY_InsertVocab.ExecSQL; QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES (:Vok_Deutsch, :Vok_Englisch);'; end; end. was muss ich denn jetzt verändern wenn ich werte die ich in die DB eintragen will direkt in den code eingebe - bloß um zu sehen ob überhaupt werte eingetragen werden können? Hier mal infos über meine tabelle: Tabellenname: TabVokabeln Spalten: ID_Vokabeln Vok_Deutsch Vok_Englisch Kategorie Datum Das kann noch nicht so schwer sein einfach mal daten in eine Tabelle zu bringen... oder? Ich verstehs nich... :( |
Re: Query aus DBEdit-Fledern bauen...
Du versuchst die Query mit ExecSQL auszuführen, bevor du die Query überhaupt definiert hast. Das kann ja nicht klappen. Probiers mal so:
Delphi-Quellcode:
procedure TVocabEingabe.Button1Click(Sender: TObject);
begin QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch) VALUES (:Vok_Deutsch, :Vok_Englisch);'; QRY_InsertVocab.Parameters.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.Parameters.ParamByName('Vok_Englisch').Value := Vok_Englisch.Text; QRY_InsertVocab.ExecSQL; end; |
Re: Query aus DBEdit-Fledern bauen...
rofl... hab ich auch grad gesehen... Klappt jetzt :) DAAAANNNKEEE!!!
Ich behalte mir aber dennoch vor weitere fragen zu stellen :D [UPDATE] Ich möchte jetzt noch das datum bzw. die uhrzeit in die DB schreiben. hier mein versuch:
Delphi-Quellcode:
Fehler kommt: Für mindestens ein Parameter wurde kein Wert angegeben...
procedure TVocabEingabe.Button1Click(Sender: TObject);
begin QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch, Datum) VALUES (:Vok_Deutsch, :Vok_Englisch, DATETIME);'; QRY_InsertVocab.Parameters.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.Parameters.ParamByName('Vok_Englisch').Value := Vok_Englisch.Text; QRY_InsertVocab.ExecSQL; end; |
Re: Query aus DBEdit-Fledern bauen...
Ich möchte jetzt noch das datum bzw. die uhrzeit in die DB schreiben.
hier mein versuch:
Delphi-Quellcode:
Also einfach Datum mit rangeklemmt...
procedure TVocabEingabe.Button1Click(Sender: TObject);
begin QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch, Datum) VALUES (:Vok_Deutsch, :Vok_Englisch, DATETIME);'; QRY_InsertVocab.Parameters.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.Parameters.ParamByName('Vok_Englisch').Value := Vok_Englisch.Text; QRY_InsertVocab.ExecSQL; end; Fehler kommt: Für mindestens ein Parameter wurde kein Wert angegeben... |
Re: Query aus DBEdit-Fledern bauen...
Delphi-Quellcode:
procedure TVocabEingabe.Button1Click(Sender: TObject);
begin QRY_InsertVocab.SQL.Text := 'INSERT INTO TabVokabeln (Vok_Deutsch, Vok_Englisch, Datum) VALUES (:Vok_Deutsch, :Vok_Englisch, :Datum);'; //Wie gesagt könnte dies auch statisch gesetzt werden QRY_InsertVocab.Parameters.ParamByName('Vok_Deutsch').Value := Vok_Deutsch.Text; QRY_InsertVocab.Parameters.ParamByName('Vok_Englisch').Value := Vok_Englisch.Text; QRY_InsertVocab.Parameters.ParamByName('Datum').Value := Now; //Oder auch ein anderes Datum/Timestamp QRY_InsertVocab.ExecSQL; end; |
Re: Query aus DBEdit-Fledern bauen...
Moin,
wenn du weiter machst, hast Du am Ende vllt den Code für die Eingabe, diesen aber nicht begriffen. Ergo, ein bisschen Eigeninitiative, BITTE. raik EDIT: Schade, schon passiert |
Re: Query aus DBEdit-Fledern bauen...
Zitat:
Dennoch DANKE @ mkinzler |
Re: Query aus DBEdit-Fledern bauen...
Ich nochmal :D,
Hab jetzt die letzten stunden damit verbracht irgendwie ne DBLookupComboBox mit daten aus meiner DB zu füllen... Habe die Datasource und das Feld in Listsource, Listfield und Keyfield mit meinen Daten eingegeben. Leider kommt immerwieder die Fehlermeldung "Zirkuläre Datenverbindung sind nicht erlaubt." Die DataSource wird von ner ADODataSet komponente mit Daten gefüttert (mit CommandText). Habt ihr ne idee wie ich das hinbekomme? Gruß eXpli |
Re: Query aus DBEdit-Fledern bauen...
Du scheinst eine Verknüpfung von DS1 nach DS2 und von DS2 nach DS1 gesetzt zu haben.
|
Re: Query aus DBEdit-Fledern bauen...
Hmm ich weiss garnicht wie man eine verknüpfung zwischen die beiden DS macht :>. Oder ist das auf die Datenbank bezogen?
|
Re: Query aus DBEdit-Fledern bauen...
Über DataSourcen
|
Re: Query aus DBEdit-Fledern bauen...
Zitat:
Du kannst nicht für die DataSource und ListSource das gleiche Dataset verwenden... nicht erlaubt. 2 Möglichkeiten: 1. TabelleDaten--> DSDaten-->DataSource der ComboBox TabelleListe--> DSListe-->ListSource der ComboBox ---> Listenanzeige 2. wenn du die Daten der Tabelle in der Lise haben möchtest. TabelleDaten--> DSDaten-->DataSource der ComboBox QueryListe-->DSListe-->ListSource der ComboBox ---> Listenanzeige - QueryListe Öffen - in AfterPost der TabelleDaten QueryListe neu öffnen sprich aktualisieren ...der Knackpunkt ist der daß du keine Datenverbindung im Kreis haben darfst. ...mit der ReadOnly Query ist der Kreis unterbrochen. ...ums einfach auszudrücken :-D |
Re: Query aus DBEdit-Fledern bauen...
Hmm irgendwie versteh ich das nicht so ganz. Versteh nicht wie ich die kompos untereinander verbinden soll das es funtioniert :(.
Habe jetzt folgende kompos erstellt: DBLookupComboBox - DataField: Kategorie - DataSource: DataSource1 - KeyField: Kategorie - ListField: Kategorie - ListSource: DataSource1 DataSource - DataSet: ADODataSet ADODataSet - CommandText: SELECT Kategorie FROM TabVokabeln - DataSource: DataSource1 Tabelle in der Datenbank sieht so aus: TabellenName: TabVokabeln Felder/Spalten: ID_Vokabeln, Vok_Deutsch, Vok_Englisch, Kategorie, Datum Ich möchte einfach die Einträge der Spalte Kategorie in der Combobox haben... :( |
Re: Query aus DBEdit-Fledern bauen...
So... Habs jetzt doch noch hinbekommen :) SAUBER!!
Da ich ne Beziehung in meiner DB habe, kommt jetzt ne Fehlermeldung: "Unterschiedliche Typen für Feld 'Kategorie'; erwartet: WideString, gefunden: Integer." Zur Erläuterung noch: Ich habe 2 Tabellen, TabVokabeln und TabKategorie In TabVokabeln ist 'Kategorie' (Zahl) und in TabKategorie befindet sich 'ID_Kategorie' (Autowert) Im Quelltext unter type steht folgendes:
Delphi-Quellcode:
ADODataSet1: TADODataSet;
... ADODataSet1Kategorie: TWideStringField; ... In was muss ich das denn ändern damit das wieder geht? PS.: Die Änderung der Tabellenspaltentypen hab ich in der DB grad erst gemacht. Dann kam der fehler. Gruß eXpli |
Re: Query aus DBEdit-Fledern bauen...
Hallo,
da du den Feldtyp in der Datenbank geändert hast, nachdem du das entsprechende Feld im Feldeditor der Komponente erzeugt hast musst du das Feld nochmal neu erzeugen: Doppelklick auf ADODataSet1 und das Feld löschen und neu aufnehmen - müsste genügen. Grüße vom marabu |
Re: Query aus DBEdit-Fledern bauen...
Klappt wunderbar! Dank dir marabu!
------------------- Jetzt habe ich ein ziehmlich kniffliges Problem! TabellenName: TabVokabeln Felder/Spalten: ID_Vokabeln, Vok_Deutsch, Vok_Englisch, Kategorie, Datum TabellenName: TabKategorie Felder/Spalten: ID_Kategorie, Kat_Deutsch, Kat_Englisch Verknüpft sind die Tabellen 1:n von TabKategorie.ID_Kategorie zu Kategorie! Habe jetzt nun eine DBLookupComboBox welche mir Einträge aus meiner DB anzeigt - genau genommen die Einträge von Kat_Deutsch. Da es ein Vokabeltrainingstool wird, soll der Benutzer mit der DBLookupComboBox eine Kategorie auswählen und dann sollen alle Vokabeln (im Grid) angezeigt werden die diese Kategorie haben. Wie bekomme ich denn "DBLookupComboBox1.Text" welcher ja die Kategorie inne hat in meine Abfrage? Und wie bekomme ich das hin, in einem Dataset die Abfrage über 2 Tabellen zu quetschen? So das im Grid dann zu sehen ist: Vok_Deutsch, Vok_Englisch, Kat_Deutsch, Datum Wäre echt klasse von euch wenn ihr mir weiterhelfen könntet!! |
Re: Query aus DBEdit-Fledern bauen...
Hallo,
Zitat:
Die DBLookupComboBox würde dir helfen, wenn du den Fremdschlüssel bei einer Eingabe oder Änderung über seinen Klartext auswählen möchtest. Was du aber jetzt vorhast ist ein Filtern deiner Vokabeln nach der Kategorie. Dazu arbeitest du am besten mit zwei record sets (ADODataSet, ADOQuery, ...) rsKat und rsVok, die du jeweils einer eigenen DataSource-Komponente dsKat bzw. dsVok zuordnest. Die Master-Detail-Verknüpfung zur Realisierung des Filterprozesses erreichst du dann, indem du dsKat der Eigenschaft DataSource von rsVok zuweist. Wenn du dann noch rsVok.MasterFields auf ID_Kategorie setzt, dann solltest du die Filterwirkung beobachten können. Die Bedienung erfolgt z.B. über eine DBComboBox (dsKat) und ein DBGrid (dsVok). Bei Unklarheiten findest du einige Erklärungen zu dieser Technik bei den Eigenschaften DataSource und MasterFields von TADODataset. Gute Nacht |
Re: Query aus DBEdit-Fledern bauen...
Das sind jetzt alle Kompos die ich verwende (habe mir neues projekt geöffnet damit ich das versuchen kann):
Delphi-Quellcode:
Meine "Einstellungen":
ADOConnection1: TADOConnection;
dsVok: TDataSource; DBGrid1: TDBGrid; rsKat: TADODataSet; rsVok: TADODataSet; dsKat: TDataSource; rsVok.DataSource auf dsKat rsVok.MasterFields auf Kategorie -> ID_Kategorie rsVok.IndexFieldnames auf Kategorie rsVok.CommandText steht "select * from TabVokabeln" rsKat.DataSource auf nix rsKat.MasterFields auf Kategorie -> ID_Kategorie rsKat.IndexFieldnames auf Kategorie rsKat.CommandText steht "select * from TabKategorie" dsVok.DataSet auf rsVok dsKat.DataSet auf rsKat DBGrid.DataSource auf dsVok DBComboBox.DataSource auf dsKat Wenn ich der DBComboBox für die DS, dsKat zuordne passiert garnix :>. Hat einer von euch ne Idee? Need Help :( |
Re: Query aus DBEdit-Fledern bauen...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe dir eine Demo erstellt. Da ich gerade kein MS Access zur Verfügung habe, basiert sie auf Paradox Tabellen. Wenn du sie studierst, dann wirst du die Zusammenhänge vielleicht besser verstehen und an dein Projekt anpassen können. Wenn du weiterhin Schwierigkeiten hast, dann stelle selbst ein kleines Demo-Projekt samt MDB-Datei bereit. Freundliche Grüße |
Re: Query aus DBEdit-Fledern bauen...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Klappt soweit ganz gut! Aber mit der ComboBox hab ich noch Probleme. Die will noch nicht richtig funktionieren. Kann dort nichts auswählen. Wenn ich mit dem Navigator die Kategorien durchswitche verändert sich auch die Kategorie in der ComboBox. Aber ich kann sie halt nicht in der Box auswählen und damit switchen :( Hier mal mein Testprojekt... Wichtig: Die Vokabeln.mdb muss einfach nur auf die C: Partition! |
Re: Query aus DBEdit-Fledern bauen...
Hi,
ohne dass ich mir dein Testprojekt schon angesehen habe: Eine DBComboBox kannst du nicht sinnvoll zur Filterung verwenden. Jeder Wertwechsel muss ja im darunter liegenden Datenbankfeld gespeichert werden, damit der Filtermechanismus anspringt. Filtern könntest du mit einer ComboBox, aber dann ist der Ansatz über die MasterSource nicht mehr möglich. Du musst dann die ComboBox zuerst füllen und dann bei deren Ereignis OnChange() die Filter-Eigenschaft des DataSet anpassen. |
Re: Query aus DBEdit-Fledern bauen...
Hmm ich möchte das nicht so kompliziert haben. Gibts denn ne komponente bei der man Auswählen kann und dabei die bestehenden Kategorien sehen kann? ListBox oder sowas?
|
Re: Query aus DBEdit-Fledern bauen...
Da bietet sich das DBGrid an. Du kannst es so konfigurieren, dass es wie eine ListBox aussieht - falls dir die Gitteroptik nicht gefällt. Alle anderen DB-Controls dienen der Veränderung eines Datenfeldes, was du bestimmt nicht willst. Und alle nicht daten-sensitiven Controls erfordern das Arbeiten mit den Dataset-Eigenschaften Filtered und Filter an Stelle von MasterSource, aber ich fürchte ich wiederhole mich.
Gute Nacht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz