Autor Beitrag
havefun_2
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 18.12.13 13:05 
Hallo zusammen,
trotz ausgiebigem Suchen und Probieren,ist es mir nicht gelungen,eine SQL-Abfrage zu erstellen die eine Variable
auswertet.
So ungefähr habe ich es mir vorgestellt:
ausblenden SQL-Anweisung
1:
WHERE        ("Spaltenname" ist "Variablenname")					

im Abfragegenerator sieht es so aus:
ausblenden SQL-Anweisung
1:
WHERE        (Kuerzel = '@sKuerz')					

Seid bitte nachsichtig,ich bin kein erfahrener Programmierer

Danke,
Havefun

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.12.13 13:11 
Dafür brauchst du sogenannte Parameter im SQL.

Für ein Howto siehe zum Beispiel hier das Thema "Parametrisierte Abfragen".
havefun_2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 18.12.13 14:31 
Hallo Ralf,
Lesen heißt bei mir nicht unbedingt verstehen.

Es ist eine Access-Datenbank und für mich wäre eine Schritt für Schritt-Anleitung genau das Richtige.

Danke,
Havefun

Moderiert von user profile iconTh69: Full-Quote entfernt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.12.13 14:36 
Zitat:
Lesen heißt bei mir nicht unbedingt verstehen.


Verstehen und lernen bedeutet lesen, probieren, scheitern, und retry bis es geht. Du solltest es zumindest probieren. Lesen ist nur der kleinste Teil.

Zitat:
Es ist eine Access-Datenbank und für mich wäre eine Schritt für Schritt-Anleitung genau das Richtige.


Die auch noch gleich kompiliert. Na klar :roll:
Für den Königsweg mit Vorkauen bin ich der falsche Mann.
havefun_2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 18.12.13 14:57 
Trotzdem danke für deine Mühe.
Havefun
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 19.12.13 07:45 
Guten Morgen!

Ich habe mir das hier angeeignet. Einfach durcharbeiten, lohnt sich, ganz sicher ;-)

_________________
Gruß
Christoph
havefun_2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 20.12.13 10:44 
Hallo zusammen,
ich kriege das einfach nicht hin.
Dieser Datenbankkram macht mich völlig kirre.
Verstanden habe ich inzwischen,daß man in der Abfrage nicht direkt auf eine Variable zugreifen soll.
Der Weg führt also über Parameter.

ausblenden C#-Quelltext
1:
this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox2(this.telefon1DataSet.einzelne_Telefonliste);					


Die Abfrage Abfr_TextBox2 sieht folgendermaßen aus:


ausblenden SQL-Anweisung
1:
2:
3:
SELECT        ID, Teilnehmer, Tel_Nr, Kuerzel
FROM            [einzelne Telefonliste]
WHERE        (Teilnehmer LIKE "?")



Wenn mir jemand erklären könnte wie ich dem Parameter den Inhalt einer Variable (sKuerz) übergeben muß,
wäre Weihnachten gerettet.
Gruß,
Havefun

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: SQL-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 20.12.13 11:56 
Ein Tableadapter generiert das eigentlich selber?

Du hast ja vermutlich im DataSet Designer den Tableadapter erzeugt und dann dort die Funktion 'Abfrage hinzufügen' (oder so ähnlich, ich benutzte selbst ein englisches VS da heißts 'Add Query') benutzt. Wenn du dort dein SQL mit Platzhalter für den Parameter eingibst sollte dir eine Methode erzeugt werden dem du nur noch die Variable übergeben mußt. Problem könnte hier sein wie man den Parameter angibt. ? könnte richtig sein wenn du einen Jet Treiber über ODBC benutzt (ich selbst benutzte kein ACCESS). Die Hochkommata sind aber bestimmt falsch. Parameter mußt du eigentlich nie Quoten. Es ist ja immer ein Variablenwert gemeint und kann nicht mit einem Spalten oder Tabellennamen verwechselt werden.

Die im Tableadapter erzeugten Methoden solltest bei dem angebotenen Präfix belassen und nicht umbenennen sondern nur ergänzen. Ich und viele andere würden sofort auf die Schlüsselbegriffe FillBY oder GetDataBy anspringen. Bei Abfr_TextBox2 mußt ich erst mal lang überlegen was das soll. Ein verständliches Namensschema wäre da die Parameter anzugeben also in deinem Fall GetDataByTeilnehmer bzw. FillByTeilnehmer.

Und dann solltest du die mit
ausblenden C#-Quelltext
1:
einzelne_TelefonlisteTableAdapter.FillByTeilnehmer(this.telefon1DataSet.einzelne_Telefonliste, sKuerz)					

aufrufen können. Für den Lerneffekt könntest du, wenn es dann funktioniert, mal in die generierte Methode reinschauen was der Designer den für Code erzeugt. Der liegt ja als stinknormaler C# Code in deinem Projekt rum.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 20.12.13 12:28 
Hallo havefun_2,

daß du den Datenbank-Assistent von VS benutzt hast, um die SQL-Befehle zu erstellen, hättest du in deinem Beitrag erwähnen sollen. Ralf und Christoph sind wohl eher von manuellem Code ausgegangen.

Zu deinem Problem:
Lies dir mal die beiden Seiten Gewusst wie: Erstellen von Datenadaptern mit einem Assistenten sowie der Link auf Gewusst wie: Konfigurieren von Parametern für Datenadapter durch.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 20.12.13 12:53 
@TH69: Ich glaube jetzt verwirren wir den Threadstarter nur. Ein Tableadapter benutzt zwar intern eine DataAdapter aber selbst ist er keiner. Und um zu wissen wie ein Tableadapter zu erzeugen und zu verwenden ist braucht man eigentlich nicht wissen wie ein DataAdapter funktioniert oder wie man den über einen Designer konfiguriert.
havefun_2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 20.12.13 14:18 
Hallo zusammen.
erst mal vielen Dank für eure Hilfe.
Es tut mir leid wenn ich zu wenige/falsche Informationen weitergegeben habe.
Das mit dem Präfix habe ich verstanden und werde es zukünftig nur noch ergänzen.
Der momentane Stand ist der:

Anzeige im Konfigurations-Assistent für TableAdapter-Abfragen
ausblenden SQL-Anweisung
1:
2:
3:
SELECT        Teilnehmer, Tel_Nr, ID, Kuerzel
FROM            [einzelne Telefonliste]
WHERE        (Teilnehmer LIKE ?)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void button1_Click(object sender, EventArgs e)
{
    suchnam = textBox1.Text;
    this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox(this.telefon1DataSet.einzelne_Telefonliste,suchnam);
}

Wenn ich einen Such-String in die textBox1 eingebe,wird er in die Variable übernommen.
In dem DataGridView wird aber kein Ergebnis angezeigt.

Anzeige im Konfigurations-Assistent für TableAdapter-Abfragen
ausblenden SQL-Anweisung
1:
2:
3:
SELECT        ID, Teilnehmer, Tel_Nr, Kuerzel
FROM            [einzelne Telefonliste]
WHERE        (Teilnehmer IS NOT NULL)


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void button2_Click(object sender, EventArgs e)
{
    this.einzelne_TelefonlisteTableAdapter.Ges_List(this.telefon1DataSet.einzelne_Telefonliste);
    textBox1.Text = "";
}

Wird button2 betätigt erscheint die komplette Liste.

Bis dann,
Havefun

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 20.12.13 14:29 
Fehlen dir vielleicht in deinem suchnam Parameter die Wildcards. Wenn du per LIKE ohne Wildcards suchst dann wäre das nicht anders als wenn du auf Gleichheit prüfst. Dann würdest du aber im SQL auch gleich = verwenden und nicht LIKE.

Also zum Beispiel

ausblenden C#-Quelltext
1:
this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox(this.telefon1DataSet.einzelne_Telefonliste,'%' + suchnam + '%');					


Edit. Deinen Code bitte in Tags schreiben. Gibt auch einen Knopf im Editor dafür (Die Combobox mit dem + Knopf daneben). Die Mods haben jetzt schon mehrmals hinter dir her korrigiert. Irgendwann haben die sonst keine Lust mehr ;)

Für diesen Beitrag haben gedankt: havefun_2
havefun_2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 20.12.13 23:05 
Hallo Ralf,
vielen Dank für deine Hilfe.
Die Abfrage funktioniert.
Unter "Bereiche" habe ich auch die Combobox gefunden und werde sie zukünftig benutzen.
Gruß,
Havefun

Moderiert von user profile iconTh69: Full-Quote entfernt