Autor Beitrag
daywalker83
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 31.03.05 02:22 
das sql-statement für die suche sieht ca. so aus:
ausblenden 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: Suche bei Google QUERY1.EXECSQL

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 31.03.05 08:23 
user profile iconretnyg hat folgendes geschrieben:
das sql-statement für die suche sieht ca. so aus:
ausblenden 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: Suche bei Google QUERY1.EXECSQL


Bei einem Select macht ExecSQL keinen Sinn. Ein einfaches Open ist besser.
Mit der Methode Locate kommt man zum gewünschten Datensatz.

Das SQL-Statement bekommst du ins Query mit:
ausblenden Delphi-Quelltext
1:
2:
3:
query1.SQL.Clear;
query1.SQL.Add('select * from tabelle');
query1.SQL.Add('where feld1 = ''blalbla''');
daywalker83 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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?
ausblenden 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt.
daywalker83 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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
ausblenden 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Einloggen, um Attachments anzusehen!
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: 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 :

ausblenden 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 user profile iconraziel: Delphi-Tags hinzugefügt.

_________________
Glauben heißt nichts wissen ...
direction4delphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

WIN 95, WIN 98, WIN ME, WIN NT, WIN 2000, WIN XP, VISTA
D2 Prof, D4 Prof,D2005 Prof, Delphi4Php
BeitragVerfasst: 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
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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.


user profile icondaywalker83 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 Threadstarter
Hält's aus hier
Beiträge: 8

Win XP Professional
D 3
BeitragVerfasst: 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 user profile iconUGrohne: Topics zusammengefasst.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 04.04.05 02:29 
so wurde das problem gelöst, falls jemand ähnliches vorhat:

ausblenden volle Höhe Delphi-Quelltext
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);
// code wurde hier abgeguckt:
// http://delphi.about.com/od/oopindelphi/l/aa082603a.htm
// http://66.102.9.104/search?q=cache:eoo7xitZFMEJ:delphi.about.com/od/usedbvcl/l/aa011004a.htm+dbgrid1+select+row&hl=de
// http://www.faqsen.de/servlet/Faqsen?Command=12&ID=505648544850494953565050&U=/delphi/tutorials.jsp&URL=http%3A%2F%2Fwww.tutorials.delphi-source.de%2Fdbeinstieg%2F&P=0
// http://66.102.9.104/search?q=cache:QHCcR1BQJgkJ:delphi.about.com/od/database/l/aa060199.htm+query1.sql.add+select+&hl=de

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...