AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Paradox Tabelle durchsuchen.
Thema durchsuchen
Ansicht
Themen-Optionen

Paradox Tabelle durchsuchen.

Ein Thema von EDatabaseError · begonnen am 13. Apr 2006 · letzter Beitrag vom 19. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#1

Paradox Tabelle durchsuchen.

  Alt 13. Apr 2006, 16:29
Datenbank: Paradox • Version: 7 • Zugriff über: BDE - TTable
Ich stehe gerade vor einem Problem. Ich möchte ALLE Einträge in einer Datenbank finden die speziellen kriterien entsprechen. Da es mehrere Kriterien sind und ab und zu auch manche leer sind findet er dann mit Locate nichts.

Delphi-Quellcode:
procedure TForm1.suchen;
var
   i: Integer;
begin
for i := 1 to 10000 do
begin
 Progressbar1.Position := i;
 if Table1.Locate('Position;Artikelgruppe;Artikelname', VarArrayOf([i, '', 'Testartikel']), [loPartialKey]) = true then
  begin
   showmessage(IntToStr(i));
  end;
end;
end;
bei diesem bsp findet er nichts obwohl Testartikel in der DB unter Artikelname eingetragen ist.

Gibt es noch andere Suchmethoden als Locate mit denen es funktionieren würde die DB zu durchsuchen und ich trotz eines leeres Suchwortes alle einträge die den anderen entsprechen finde?


mfg
Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Paradox Tabelle durchsuchen.

  Alt 13. Apr 2006, 18:07
Warum die Schleife? Und warum so eine große Grenze? Wieviel Datensätze passen zu diesem Kriterium? Welcher typ hat Arikelgruppe?

Bei Verwendung einet Tabel würde ich in diesem fall dann .Filter verwenden,

Ich würde aber zu einem Query raten:

Select * from <tabelle> where Position = :pos and :artikelgruppe = :artgrp and Artikelname like :artikel;
Markus Kinzler
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Paradox Tabelle durchsuchen.

  Alt 14. Apr 2006, 12:28
Zitat von mkinzler:
Warum die Schleife? Und warum so eine große Grenze? Wieviel Datensätze passen zu diesem Kriterium? Welcher typ hat Arikelgruppe?

Bei Verwendung einet Tabel würde ich in diesem fall dann .Filter verwenden,

Ich würde aber zu einem Query raten:

Select * from <tabelle> where Position = :pos and :artikelgruppe = :artgrp and Artikelname like :artikel;
sodele mal zum erstenm die schleife durchsucht die Position auch Laufende Nummer brauch ich nämlich wenn ich alles mit ... herausfinden will. Große Grenze da es mal ein Mittelständiges Lager managen soll. typ alle bis auf position sind strings. Position ist ein Integer.

Von Filter und Query hab ich 0 Ahnung aber hier mal ein Beispiel was ich überhaupt machen will.

Die Datenbank:
Position---------------Artikelname-------------------Artikelgruppe----und die anderen...
1----------------------Testartikel 1-----------------A Artikelgruppe
2----------------------Testartikel 2-----------------B Artikelgruppe
3----------------------Testartikel 3-----------------A Artikelgruppe
4----------------------kein Testarti-----------------A Artikelgruppe
...

In der Suche gebe ich jetzt ein:
Artikelname : Testartikel
Artikelgruppe : A Artikelgruppe

Als Ergebnis will ich nun die Einträge aus Position 1 u. 3 in ein bsp. Array oder so einfügen.


Geht das?



Mfg
Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Paradox Tabelle durchsuchen.

  Alt 14. Apr 2006, 12:46
Locate findet doch den Datensatz mit dem Kriterium, du mußt also nicht für jeden Datensatz in der Tabelle ein Locate ausführen.

Ich würde Artikelgruppe in eine eigene Tabelle auslagern.
Ein Filter blendet alle Datensätze eines DataSets( TTable, TQuery) aus welche nicht dem Filter entsprechen.
Delphi-Quellcode:
Table.Filter := '<Filterbedingung>';
Table.Filtered := True;
Ein Query kappselt eine SQL-Abfrage auf einen Datenbestand ( Kann Daten aus mehreren Tabellen) mit einbeziehen.

Zitat:
Als Ergebnis will ich nun die Einträge aus Position 1 u. 3 in ein bsp. Array oder so einfügen.
Geht das?
Ja,
-als Table mit Filter =: Table.Filter := 'Artikelname='''Testartikel''' and Artikelgruppe='''A Artikelgruppe''' and ( Position = 1 or Position = 3)'; -Als Query:
Delphi-Quellcode:
Query.SQL.Text := 'Select * from <tabelle> where :artikelgruppe = :artgrp and Artikelname = :artikeland Position in ( :pos)';
Query.ParamByName(
'artgrp') := 'A Arikelgruppe';
Query.ParamByName(
'artikel') := 'Testartikel';
Query.ParamByName(
'artgrp') := '1,3';
Query.Open;
Markus Kinzler
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Paradox Tabelle durchsuchen.

  Alt 14. Apr 2006, 18:33
Zitat von mkinzler:
Locate findet doch den Datensatz mit dem Kriterium, du mußt also nicht für jeden Datensatz in der Tabelle ein Locate ausführen.
Ich will eben auch ähnliche Datensätze. Da Locate auf PatialKey ist findet man auch wenn in der DB Testartikel 5 ist und wenn man nach Testartikel sucht.

Zitat:
Ich würde Artikelgruppe in eine eigene Tabelle auslagern.
Das wäre nicht so gut denn es kommen ja zu diesen drei Feldern noch einige dazu. (Es sind insgesammt 23) 23 Tabellen sin net so schön...


Zitat:
Ein Filter blendet alle Datensätze eines DataSets( TTable, TQuery) aus welche nicht dem Filter entsprechen.
Delphi-Quellcode:
Table.Filter := '<Filterbedingung>';
Table.Filtered := True;
Ein Query kappselt eine SQL-Abfrage auf einen Datenbestand ( Kann Daten aus mehreren Tabellen) mit einbeziehen.
Könntest du zu meinem obrigen Suchbsp. mal so eine Filterbedingung schreiben.

Zitat:
Zitat:
Als Ergebnis will ich nun die Einträge aus Position 1 u. 3 in ein bsp. Array oder so einfügen.
Geht das?
Ja,
-als Table mit Filter =: Table.Filter := 'Artikelname='''Testartikel''' and Artikelgruppe='''A Artikelgruppe''' and ( Position = 1 or Position = 3)'; -Als Query:
Delphi-Quellcode:
Query.SQL.Text := 'Select * from <tabelle> where :artikelgruppe = :artgrp and Artikelname = :artikeland Position in ( :pos)';
Query.ParamByName(
'artgrp') := 'A Arikelgruppe';
Query.ParamByName(
'artikel') := 'Testartikel';
Query.ParamByName(
'artgrp') := '1,3';
Query.Open;
[/quote]

Das vergessen wir mal ich glaub du hast mich falsch verstanden. 1 u. 3 entsprechen halt den Bedingungen. Wenn ich 3 u. 4 verstauche möchte ich 1 u. 4 als ergebnis.

Kurz: Ich möchte ALLE Datensätze die den eingegebenen Bedingungen nur zum Teil oder Ganz entsprechen anzeigen.


Mfg
Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Paradox Tabelle durchsuchen.

  Alt 14. Apr 2006, 18:50
Zitat von EDatabaseError:
Zitat von mkinzler:
Locate findet doch den Datensatz mit dem Kriterium, du mußt also nicht für jeden Datensatz in der Tabelle ein Locate ausführen.
Ich will eben auch ähnliche Datensätze. Da Locate auf PatialKey ist findet man auch wenn in der DB Testartikel 5 ist und wenn man nach Testartikel sucht.
dann nimmt man ststt '=' 'like'
Zitat:
Zitat von mkinzler:
Ich würde Artikelgruppe in eine eigene Tabelle auslagern.
Das wäre nicht so gut denn es kommen ja zu diesen drei Feldern noch einige dazu. (Es sind insgesammt 23) 23 Tabellen sin net so schön...
Du hast mich total falsch verstanden. Ich wollte ja aus diesem Grund(Vermeidung Redundanz) alles was sich auf die Artikelgruppe bezieht in eine eigene Tabelle auslagern, und in der Artikeltabelle nur die ID auf die Gruppe ablegen.

Tabelle Artikelgruppe
ID--------------------Gruppenname---------<weitere Felder zur Artikelgruppe>
1 A Artikelgruppe
2 B Artikelgruppe

Tabelle Artikel

Die Datenbank:
Position---------------Artikelname-------------------Artikelgruppe----und die anderen...
1----------------------Testartikel 1-----------------1
2----------------------Testartikel 2-----------------2
3----------------------Testartikel 3-----------------1
4----------------------kein Testarti-----------------1

Wenn später viele Datensätze in der Artikeldatenbank sind, würde ich die sehr Raten keine Table sondern eine Query-Komponente zu nehnen. Da in einer TTable-Komponente immer alle datensätze enthalten sind, auch wenn diese gefiltert ist. (DS nur ausgebelndet).

Delphi-Quellcode:
Query.Sql.Text := 'select * from artikel a, artikelgruppe g where a.Artikelname like :artikel and g.id = a.Artikelgruppe and g.gruppenname = :artgrp';
Query.ParamByName('artgrp').asString := 'A Artikelgruppe';
Query.ParamByName('artikel').asString := '%Test%';
Query.Open;
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Paradox Tabelle durchsuchen.

  Alt 14. Apr 2006, 20:33
Hallo Tobi,

Markus hat in seinem ersten Beitrag den wertvollsten Rat gegeben. Auch wenn die BDE keine vollwertige relationale Datenbank darstellt, so gewinnst du doch durch den Einsatz von TQuery in Verbindung mit LocalSQL jede Menge Flexibilität. Auch wenn du schreibst, dass du dich mit Queries nicht auskennst, rate auch ich dir zur Auseinandersetzung mit SQL. Betrachte es einfach als zukunftssichere Investition. Gerade bei großen Datenmengen vereinfacht der mengentheoretische Ansatz die Programmlogik ungemein. Und da ich mir gut vorstellen kann, dass dein Projekt bei ernsthaftem Betreiben kurz- bis mittelfristig auf eine Client-Server-Architektur umgestellt werden wird, bist du mit LocalSQL und TQuery schon nahe dran. Alles andere (Filter, Ranges, etc,) führt momentan nur weg von der Ideallinie.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Paradox Tabelle durchsuchen.

  Alt 15. Apr 2006, 08:15
Zitat von marabu:
Hallo Tobi,

Markus hat in seinem ersten Beitrag den wertvollsten Rat gegeben. Auch wenn die BDE keine vollwertige relationale Datenbank darstellt, so gewinnst du doch durch den Einsatz von TQuery in Verbindung mit LocalSQL jede Menge Flexibilität. Auch wenn du schreibst, dass du dich mit Queries nicht auskennst, rate auch ich dir zur Auseinandersetzung mit SQL. Betrachte es einfach als zukunftssichere Investition. Gerade bei großen Datenmengen vereinfacht der mengentheoretische Ansatz die Programmlogik ungemein. Und da ich mir gut vorstellen kann, dass dein Projekt bei ernsthaftem Betreiben kurz- bis mittelfristig auf eine Client-Server-Architektur umgestellt werden wird, bist du mit LocalSQL und TQuery schon nahe dran. Alles andere (Filter, Ranges, etc,) führt momentan nur weg von der Ideallinie.

Freundliche Grüße vom marabu
OK. Ich hab nur ein wenig erfahrung mit MySQL u. PHP. Gibt es irgentwo ein Tutorial wo das LocalSQL erklärt wird?

Mfg
Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Paradox Tabelle durchsuchen.

  Alt 15. Apr 2006, 09:51
Also, wenn du etwas Erfahrung in mysql hast, dann kannst du ja die Grundlagen von sql. Dann dürfte das Problem eigentlich schnell gelöst sein. LocalSQL ist nur ein Feaure der BDE, welches es dir ermöglicht SQL-Befehle auf Datenbanken anzuwenden, die das von sich aus nicht unterstützen (dbase, Paradox).
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Paradox Tabelle durchsuchen.

  Alt 15. Apr 2006, 10:16
Eigentlich ist ein Tutorium zu LocalSQL auch entbehrlich. Die Online-Hilfe LOCALSQL.HLP im Installationsverzeichnis der BDE erklärt die (zahlreichen) Einschränkungen und (spärlichen) Erweiterungen zum SQL Standard ganz gut.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz