Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blob mit SQL nach Teilstring durchsuchen? (https://www.delphipraxis.net/55683-blob-mit-sql-nach-teilstring-durchsuchen.html)

Angel4585 25. Okt 2005 16:11

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Problem dabei ist nur das mein Chef meinte ich soll alles in dieser einen Tabelle machen, am besten mit BLOBs und mein Chef ist im Moment auf der Systems

mschaefer 25. Okt 2005 16:26

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Meint Dein Chef auch, dass Du das mit Paradox machen mußt. // Martin

PS: Systems steht auch noch auf der ToDo-Liste...

marabu 25. Okt 2005 16:40

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Zitat:

Zitat von Angel4585
mein Chef meinte

Hat dein Chef dir nur gesagt "schaff was bis ich wieder komm" oder hat er dir auch gesagt, was dabei heraus kommen soll? Hat er dir seine Anforderungen schriftlich gegeben? Daraus könnte man ableiten, ob eine Zeilenlängenbeschränkung auf 255 Zeichen akzeptabel ist oder nicht.

marabu

alex517 25. Okt 2005 20:04

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Hi Angel4585,

Zitat:

ich suche doch schon mit SQL..kann ich dann überhaupt noch das ganze mit dem OnFilterRecord verbinden?
Ja. Und bei BLOBs bleibt dir da auch nichts anderes übrig.

du warst schon dicht dran, versuchs mal damit:
Delphi-Quellcode:
procedure TdmMain.SearchQueryFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := Pos(SearchString,DataSet.Fields.Fields[1].AsString)<>0;
end;
...
  SearchQuery.filtered := true; // nicht vergessen
...
Wie bereits gesagt ist zu überlegen ob es wirklich ein BLOB sein muss oder auch ein String mit 255 Zeichen reicht.
Dann kann man auch wieder mit SQL filtern.

Außerdem kann ich nur empfehlen Paradox+BDE in den wohlverdienten Ruhestand zu schicken.
Man kann sich damit viel Ärger ersparen.

alex

Angel4585 26. Okt 2005 08:29

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Hmm..

@ALL Es muss ein unbegrenztes Feld sein. Deswegen Memo sonst hätte ich ein einfachen String genommen.


@Alex : Bei deiner Lösung kommt die Meldung, das auf das Feld mit dem MemoBlob in einem Filter nicht zugeriffen werden kann.

@Marabu : Aufgabenstellung ist die, das ich eine Tabelle mit 60 Feldern habe und ungefähr 10000 Einträgen. Diese soll möglichst schnell durchsucht und gefiltert werden können. Ob mit Table oder Query ist egal.

@mschaefer : Ja muss mit Paradox sein, da die Tabelle ja schon existiert und wir hier generell mit Paradox arbeiten.

mschaefer 26. Okt 2005 08:37

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Unter den Konditionen hast Du die Lösung wie es obern schon durchgesprochen ist. Durchlauf per Hand programieren und im AsString des Blobfeldes den Wert mit Pos suchen. Damit ist das wohl zum neuen Arbeitstag als theoretisch gelöst einzustufen, denn Stringsuche ist sicherlich kein Problem.

Grüße / Martin

Angel4585 26. Okt 2005 08:48

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Ja aber wie ichs gerade an alex geschrieben habe funktioniert das nicht.. Es kommt die Meldung das auf dieses Feld in einem Filter nicht zugegriffen werden kann.

Muss ich da noch irgendwelche anderen Dinge beachten?

Das ganze sieht jetzt so aus.
Delphi-Quellcode:
procedure TdmMain.SearchQueryFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
 i : integer;
begin
Accept:=false;
for i:= 0 to SearchQuery.FieldCount - 1 do
 if (Pos(tfSearch.SearchString,DataSet.Fields.Fields[i].AsString)<>0)then
  begin
  Accept := true;
  break;
  end;
end;

marabu 26. Okt 2005 09:23

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Hallo Martin,

du kannst nicht einfach in MemoField.AsString suchen, denn da steht '(MEMO)' drin. Du musst dir schon den Inhalt des Memos besorgen. Du hast ja schon gemerkt, dass du auf das Memo nicht aus dem Filter-Event zugreifen kannst, also mache es so wie ich:
Delphi-Quellcode:
procedure TDataForm.TableFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  i: integer;
  f: TField;
  s, pkName: string;
  pkValue: variant;
begin
  Accept:=false;
  with DataSet do
  begin
    pkName := 'Nummer';
    pkValue := FieldValues[pkName];
    for i := 0 to Pred(FieldCount) do
    begin
      f := Fields[i];
      case f.DataType of
        ftMemo: s := GetMemo('int', f.FieldName, pkName, pkValue);
        ftGraphic: s := '';
        else s := f.AsString;
      end;
      if AnsiContainsText(s, SearchStr) then
      begin
        Accept := true;
        Break;
      end;
    end;
  end;
end;

function GetMemo(tblName, fldName, keyName: string; keyValue: variant): string;
const
  SELECT = 'SELECT %s FROM %s WHERE %s = :key';
var
  strm: TStream;
  q: TQuery;
begin
  q := TQuery.Create(nil);
  with q do
  begin
    DatabaseName := 'TEST';
    SQL.Text := Format(SELECT, [fldName, tblName, keyName]);
    Params.ParamValues['key'] := keyValue;
    Open;
    strm := q.CreateBlobStream(Fields[0], bmRead);
    SetLength(Result, strm.Size);
    strm.ReadBuffer(Result[1], strm.Size);
    strm.Free;
    Close;
  end;
end;
Grüße vom marabu

Angel4585 26. Okt 2005 09:48

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Ähm.. ja.. mom..

GetMemo(tblName, fldName, keyName: string; keyValue: variant): string;

tblName = Tabellenname;
fldName = Felder die angezeigt werden sollen;
KeyName = Feld das durchsucht werden soll;
und KeyValue = Wert der in dem zu durchsuchenden Feld enthalten sein soll, oder?

marabu 26. Okt 2005 10:19

Re: Blob mit SQL nach Teilstring durchsuchen?
 
Nicht ganz:

tblName = Tabellenname
fldName = Name des Memo-Feldes, dessen Inhalt geholt werden soll
KeyName = Name des Feldes, welches für den Zugriff verwendet werden soll
KeyValue = Eindeutiger Schlüsselwert

Alles klar?

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
Seite 2 von 5     12 34     Letzte »    

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