Autor |
Beitrag |
daywalker83
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 01:46
Hallo Leute!
Habe zwar schon sehr viel hier rumgesucht, aber brauche doch noch hilfe von euch.
Ich habe folgendes Problem. Ich habe eine Datenbank (Paradox7). Es ist ne ganz einfache. Eine Namensliste. Die Tabelle sieht so aus:
Name Vorname
Müller Franz
Meyer Helmut
usw
Auf meinem Formular gibt es jetzt die beiden TBEdit (Name, Vorname), DBNavigator, eine TTable, eine TDatasource, und ein TBGrid. Ich kann nun die Namen in die Tabelle eintragen und diese stehen dann in der Liste (TBGrid). Jetzt will ich ein Suchfeld einfügen (ganz normales Edit) und mit einem Butten die Suche starten. Ich habe herausgefunden, dass man dies mit der Komponente TQuery machen kann. Man muss die wohl irgendwie mit der Datenbank verbinden und eine SQL-abfrage machen. Meine Frage ist nun, wie mach ich das. Der gefundene DAtensatz soll auch in der Liste markiert werden. Kann mir das mal jemand erklären? Wo muss ich die Anweisung reinschreiben und wie verbinde ich das ding richtig mit meiner Datenbank. Ich hoffe jemand kann mir helfen. Mit SQL habe ich zwar schon gearbeitet (PHP), weiss aber nicht wie ich das hier in Delphi machen kann. Auch diese Tutorials haben mir nicht sehr geholfen. Habe mal in der SChule Delphi gehabt. DIes ist aber nun sehr lange her. Mit Datenbanken haben wir da aber nicht gearbeitet. Ich wäre für jede Antwort dankbar.
CU
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 31.03.05 02:22
das sql-statement für die suche sieht ca. so aus:
Delphi-Quelltext 1:
| query1.SQL.Add('SELECT * from kunden WHERE name like %' + EditSuchbegriff.text + '% ;'); |
hier findest du ein paar codebeispiele wie du das anwenden kannst: QUERY1.EXECSQL
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 31.03.05 08:23
|
|
daywalker83 
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 11:04
Vielen Dank schon mal für eure Antworten. Leider weiss ich aber immer noch nicht wie ich den TQery mit der Datenbank und so verbinde. Was muss ich denn da machen?Wo gebe ich den Code eigentlich ein? Will das ja alles mit dem Butten ansteuern. Kommt der Code hier rein?
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); begin [Hier] end;
end. |
Markiert er mir dann auch den entsprechenden Eintrag in der TBGrid?
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
daywalker83 
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 11:31
hey Retnyg!
Sehe gerade dass du Geburtstag hast.
Na dann mal Herzlichen Glückwunsch und alles Gute.
Danke noch mal für deine schnelle Antwort
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Do 31.03.05 11:32
Hi
die TQuery verbindest du genauso wie TTable mit deiner Datenbank. Die TDatasourcekomponente deines DBGrid verbindest du mit der Query. Der Code kommt ins OnClick Ereignis deines Buttons
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
daywalker83 
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 11:55
Also das habe ich jetzt versucht. Ich habe hier mal als Anhang meine Form als jpg gespeichert. Da seht ihr wie ich das aufgebaut habe. Da ist jetzt auch ein TQuery bei. Unter DatabaseName habe ich namen eingetragen. So heisst die Datenbank. Das TBGrid konnte ich nicht mit dem Query verbinden. Unter Datasource da steht nur Datasource1. Aber Query ist dort nicht zu sehen. In dem OnButton habe ich den Code
Delphi-Quelltext 1: 2: 3:
| Query1.Active := False; Query1.sql.add('SELECT * FROM namen WHERE Vorname = "%'+Edit1.text+'%"'); Query1.Active := True; |
eingefügt.
Wenn ich aber jetzt in Edit1 z.b. Michael eintrage und auf den Button drück passiert nichts.
Was mache ich denn Falsch? Es liegt wahrscheinlich daran, dass ich das TBGrid nicht mit dem Query verbunden habe. Aber konnte ich ja auch nicht.
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
Einloggen, um Attachments anzusehen!
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Do 31.03.05 11:57
Hi
Das DBGrid ist mit Datasource1 verbunden. Datasource1 verbindest du mit der Query.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
daywalker83 
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 12:11
Also das hab ich jetzt versucht. Aber bei Datasource1 gibt es keine möglichkeit das mit der query zu verbinden. Jetzt hab ich das Query mit Datasource1 verbunden. Meintest du das? Wenn ja kommt bei mir der Fehler: Unbekannte Datenbank Alias: namen.db.
Woran liegt das?
|
|
patrick dee
      
Beiträge: 311
Win 98SE, WinXP
D3,D6
|
Verfasst: Do 31.03.05 12:46
Hi,
ganz langsam mit den Pferden:
1. Verbinde die Querry mit der DataSource.Suche in der DataSource das Feld DataSet.Dort kannst du aufklappen und da sollte die Query drinen stehen.
2. Verbinde die DataSource mit einer DBGrid brauchst ja auch das Ergebnis sichtbar - oder ?
So nun den Butten für die Suche :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| begin Query1.SQL.Clear; Query1.SQL.Add('Select * from adresse where nachname Like ' + #39#37 + edit1.text + #37#39 ); Query1.open; Query1.next; DBGrid1.Columns[0].field.FocusControl;
end; |
So, nun in die Edit einen Nachname eingeben und Button drücken. Das Ergebnis wird in der DBGrid angezeigt und der erste Eintrag markiert.
So sollte es funzen.
gruß
patrick
Moderiert von raziel: Delphi-Tags hinzugefügt.
_________________ Glauben heißt nichts wissen ...
|
|
direction4delphi
      
Beiträge: 84
WIN 95, WIN 98, WIN ME, WIN NT, WIN 2000, WIN XP, VISTA
D2 Prof, D4 Prof,D2005 Prof, Delphi4Php
|
Verfasst: Do 31.03.05 12:53
Denke du wirst dir bei diesem einfachen Prog mit der Table.Filtered Sache weichter tun. Hier ein kleines Beispielprog
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables, StdCtrls;
type TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin Table1.FilterOptions:=[foCaseInsensitive]; Table1.filter:='Name = '''+Edit1.text+'*'' OR Vorname = '''+Edit1.text+'*'''; Table1.Filtered:=true; end;
end. |
Der Nachteil liegt darin das du den Beginn des Namens bei deiner Suche wissen musst. Der Platzhalter '*' kann im Filter nur hinten angehängt werden.
daywalker83 hat folgendes geschrieben: | Also das hab ich jetzt versucht. Aber bei Datasource1 gibt es keine möglichkeit das mit der query zu verbinden. Jetzt hab ich das Query mit Datasource1 verbunden. Meintest du das? Wenn ja kommt bei mir der Fehler: Unbekannte Datenbank Alias: namen.db.
Woran liegt das? |
|
|
daywalker83 
Hält's aus hier
Beiträge: 8
Win XP Professional
D 3
|
Verfasst: Do 31.03.05 13:32
Ich weiss nicht was ich falsch mache. In der Datasource1 steht unter DataSet keine query. Warum auch immer. Die query ist aber mit auf meiner Form. Er müsste sie doch finden
Kann mir denn keiner weiterhelfen? Ich weiss nicht was ich falsch mache. Hat jemand denn vielleicht schon mal ein ähnliches Programm geschrieben. Dann könnte ich mir das ja mal ansehen und abkupfern. Bitte helft mir
Moderiert von UGrohne: Topics zusammengefasst.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 04.04.05 02:29
so wurde das problem gelöst, falls jemand ähnliches vorhat:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| type thack = class(tdbgrid) ...
procedure TForm1.ButtonSucheClick(Sender: TObject);
var id : variant; i : integer; begin query1.sql.clear; query1.SQL.Add ('select * from namen.db where vorname like ' + quotedstr('%' + edit1.text + '%') + ' ;'); query1.open ; if query1.recordcount <> 0 then begin id := query1.FieldValues['ID']; query1.close; query1.sql.clear; query1.SQL.Add ('select * from namen.db ;'); query1.open ; for i := 0 to query1.RecordCount - 1 do begin if query1.FieldValues['ID'] = id then begin thack(Dbgrid1).DataLink.ActiveRecord := i; dbgrid1.Repaint; query1.close; exit; end; query1.next; end; end; query1.close; end; |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|