![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE - TTable
Paradox Tabelle durchsuchen.
:| 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:
bei diesem bsp findet er nichts obwohl Testartikel in der DB unter Artikelname eingetragen ist.
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; 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 |
Re: Paradox Tabelle durchsuchen.
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; |
Re: Paradox Tabelle durchsuchen.
Zitat:
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 |
Re: Paradox Tabelle durchsuchen.
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:
Ein Query kappselt eine SQL-Abfrage auf einen Datenbestand ( Kann Daten aus mehreren Tabellen) mit einbeziehen.
Table.Filter := '<Filterbedingung>';
Table.Filtered := True; Zitat:
-als Table mit Filter =: T
Delphi-Quellcode:
-Als Query:
able.Filter := 'Artikelname='''Testartikel''' and Artikelgruppe='''A Artikelgruppe''' and ( Position = 1 or Position = 3)';
Delphi-Quellcode:
Query.SQL.Text := 'Select * from <tabelle> where :artikelgruppe = :artgrp and Artikelname = :artikel' and Position in ( :pos)';
Query.ParamByName( 'artgrp') := 'A Arikelgruppe'; Query.ParamByName( 'artikel') := 'Testartikel'; Query.ParamByName( 'artgrp') := '1,3'; Query.Open; |
Re: Paradox Tabelle durchsuchen.
Zitat:
Zitat:
Zitat:
Zitat:
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 |
Re: Paradox Tabelle durchsuchen.
Zitat:
Zitat:
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; |
Re: Paradox Tabelle durchsuchen.
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 |
Re: Paradox Tabelle durchsuchen.
Zitat:
Mfg Tobi |
Re: Paradox Tabelle durchsuchen.
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).
|
Re: Paradox Tabelle durchsuchen.
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 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-2025 by Thomas Breitkreuz