![]() |
na gut, mit folgendem steht alles in deinem Dataset:
Code:
LiefModul ist ein Datamdule, DataSet ein dataset. Probier einfach weiter.
with LiefModul.LiefDS do begin
Close; SelectSQL.Text := 'SELECT NR, NAME ORDER BY NR'; Open; end; |
Hallo Werwurm,
vielleicht ist es ja nur ein Übertragungsfehler, aber deine Zeile:
Delphi-Quellcode:
enthält einen nicht abgeschlossenen String. Hinter das Album) muss noch ein '.
Form1.Query1.SQL.Add('ORDER BY (Interpret, Jahr, Album);
Und wie oben schon erwähnt, eine Abfrage, die eine Datenmenge zurückliefert muss immer mit Open ausgeführt werden. Nur Abfragen, die keine Datenmenge zurückliefern (z.B. DELETE) werden mit ExecSQL ausgeführt. Ich empfehle außerdem, keine relativen Pfadnamen bei der Tabelle zu benutzen. |
Re: Per SQL ein Memo-Feld durchsuchen
Zitat:
das geht mit Paradox IMHO gar nicht. Du kannst aber den Text des Memos irgendwo zwischenspeichern und dann den Text mit POS prüfen. Sollte es sich um eine große Datenbank mit umfangreichen Memo-Inhalten handeln, wird das ganze sehr langsam von statten gehen - dann würde ich Dir sowieso ein anderes DBMS empfehlen... |
Re: Per SQL ein Memo-Feld durchsuchen
Zitat:
Hallo Catbytes, welchen Datenbanktyp sollte ich den wählen? Ich versuche meine LP's inkl. der Titel zu verwalten, von daher brauche ich ein String-Feld mit mehr als 255 Zeichen. Und in diesem Feld möchte ich eben auch nach den einzelnen Titeln suchen. Vielleicht habe ich ja auch schon den falschen Ansatz??? Übrigens hatte Mr. Spock recht was meinen nicht abgeschlossenen String betrifft, im meinem Programm stehts richtig... |
Re: Per SQL ein Memo-Feld durchsuchen
Zitat:
Du hast vermutlich kein Datenbankmodell erstellt. Du könntest z.B. eine Tabelle erstellen, in denen Du die Grunddaten der Alben speicherst, die (normalerweise - Ausnahmen bestätigen die Regel) einzigartig sind, wie Albumname, Erscheinungsjahr, Anzahl der Titel, Gesamtzahl der Titel, Genre etc. Du mußt dann nur eine einzigartige ID pro LP vergeben (leicht z.b. über einen Autozähler). Dann legst Du eine neue Tabelle an - z.B. Titel. Dort hast Du dann ein ID-Feld als LongInt, daß auf die ID der Albumtabelle verweisst. So kannst Du dann theoretisch unbegrennzt Titel pro Album verwalten. Ich würde dann auch noch andere Tabellen erzeugen (z.B. Genre.db, Land.db, Plattenlabel.db, Künstler.db etc.) - eben alles, was i.d.R. nicht einzigartig ist. Du kannst dann alles über die ID verbinden. Wenn Du keine Zahlen möchtest, kannst Du das auch über einen einzigartigen Matchcode machen. Dort könntest Du aber auf Probleme stoßen, falls mal zwei verschiedene LPs den gleichen Namen haben. Such Dir im Internet per Google mal die Grundfunktionen und Aufbauten einer Datenbank an (1:n und 1:1-Beziehungen, Analyse, Sicherung etc). Danach kannst Du Dich mit Spezialthemen wie "Entity-Relationship-Modellierung" auseinandersetzen - und danach die verschiedenen DBMS-Systeme in Angriff nehmen (XML, fixed-length/variable-length-Datenfelder). |
Re: Per SQL ein Memo-Feld durchsuchen
Zitat:
genau damit habe ich gerade angefangen. Nun habe ich drei Tabellen in denen ich meine Daten verwalte (alben, Titel Seite A und Titel Seite B). Der Nachteil ist, das ich mein Programm, welches bis auf die Suchfunktion fertig war, jetzt nochmal neu schreibe. Eine Überarbeitung wäre mir zu kompliziert und zu Fehleranfällig. Ich hab mir das wohl zu einfach vorgestellt. Aber großen Dank für Deine Hilfe!!! |
Wie schon ein andere User festestellt hat, kann man ein Memofeld nicht nach Strings durch suchen.
Hilfreich währe, wenn Du Deine Tabellenstrucktur Postest. Vorweg ein Tipp: Lege doch ein Suchfeld in Deiner Tabelle an z.B.Titel o. ä. meinetwegen setze einen Sekundäindex auf das Feld erhöht die Suchgeschwindigkeit dann kannst Du mit Query1.FindNearest([Edit2.Text]);//mit einem TEdit oder mit einer Combox Query1.Locate('BUCHTEXT',cbSuch.Text,[loPartialKey]); natürich muss Du bei einer Combobox die Daten im FormCrate Event erts in die Comox einlesen. Mit FindNearst, muss das Feld indiziert sein!!! Hier ein kleiner Auszug von mir procedure TfrmBelege.FormCreate(Sender: TObject); begin DateTimePicker1.Enabled := False; DateTimePicker1.Date := Date; cbSuch.Clear; BudgetData.tblBelege.First; while not BudgetData.tblBelege.Eof do begin cbSuch.Items.Add(BudgetData.tblBelegeBUCHTEXT.Valu e); BudgetData.tblBelege.Next; end; BudgetData.tblBelege.First; cbSuch.Text := BudgetData.tblBelegeBUCHTEXT.Value; inipfad := ExtractFilePath(ParamStr(0))+ '\budget.ini'; appini := TIniFile.Create(inipfad); BudgetData.tblBelegeEINNAHMEN.DisplayFormat := AppIni.ReadString('Geld','Einheit','###,###,###.00 DEM'); BudgetData.tblBelegeAUSGABEN.DisplayFormat := AppIni.ReadString('Geld','Einheit','###,###,###.00 DEM'); AppIni.Free; DBinfo; end; |
Zitat:
meine Beschränkung lag auf Paradox. IMHO kann man bei anderen DBMS sehr wohl Memos nach Strings durchsuchen. Ich glaube, korrigiert mich, wenn es nicht stimmt, das geht sogar bei DBase... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 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 by Thomas Breitkreuz