Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Falsche Zeichen in einem DB-Feld per SQL finden (https://www.delphipraxis.net/117348-falsche-zeichen-einem-db-feld-per-sql-finden.html)

nachtstreuner60 16. Jul 2008 12:44

Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos6.51

Falsche Zeichen in einem DB-Feld per SQL finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Spezialisten,

ich suche mal wieder nach einer Lösung per SQL-Befehl.

In einer Datenbank werden eingescannte(Barcodewerte) in einem VarChar-Feld abgelegt. Der String fängt immer mit
dem Buchstaben 'F' an, danach schliessen sich Ziffern an (6 stellig) z. B. F000256.

Nun erzeugt der Barcodescanner manchmal einen Fehlerhaften String z.B. 'F00/257' oder 'F0%0078', es gibt also manchmal
hinter dem ersten Buchstaben F auch andere Zeichen als nur die Ziffern 0-9 welche richtig wären.

Wie kann ich nun das Feld 'ScanCode' indem dieser String abgelegt wird nach diesen fehlerhaften Scancodes durchsuchen und
als Ergebnis einer SQL-Abfrage darstellen.

Unten habe ich mal einen aktuellen Auszug(Screen) der DB. :wall:

Danke für eure Bemühungen.

alzaimar 16. Jul 2008 13:09

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Mit 'LIKE' sollte das gehen,
SQL-Code:
Select * from tabelle where Barcode Not Like 'F[0-9][0-9][0-9][0-9][0-9][0-9]'
Speziell für Firebird müsstest du mal in der Hilfe nachschauen....

nachtstreuner60 16. Jul 2008 13:43

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alzaimar,

vielen Dank für die rasche Antwort.

Ich habe deinen Tip mal ausprobiert, erhalte aber u.a. Fehlermeldung im ScreenCopy.

Hier mal der Codeschnipsel :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
with zConFehler do begin
     zConFehler.Connect;
     zQuery1.SQL.Clear;
     zQuery1.SQL.Text := 'select * from IDOC_REAL '+
         'where Idoc_REAL."ScanCode" Not Like '+
         'F[0-9][0-9][0-9][0-9][0-9][0-9]';
     zQuery1.ExecSQL;
     zQuery1.Active := true;
end;

nachtstreuner60 16. Jul 2008 14:05

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alzaimar,

ich habe jetzt mal den SQL-Befehl abgeändert, jetzt bekomme ich keine Fehlermeldung mehr.
Aber das Ergebnis ist nicht richtig. Er zeigt alle Datensätze, ob fehlerhafte (wie die gelb markierten,) als auch die
richtigen und fehlerfreien Datensätze .

Screenshot anbei. Was mache ich hier noch falsch ?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
with zConFehler do begin
     zConFehler.Connect;
     zQuery1.SQL.Clear;
     zQuery1.SQL.Text := 'select * from IDOC_REAL where Idoc_REAL."ScanCode" '+
     'Not Like '+Quotedstr('F[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')+
     ' and AKTION = '+Quotedstr('FEHLER')+
     ' order by "ScanCode"';
     zQuery1.ExecSQL;
     zQuery1.Active := true;
     label1.Caption :=IntToStr(zQuery1.RecordCount);
end;
Hinweis : Das Feld Scancode hat eine Feldlänge von zehn Zeichen, deswegen 9x [0-9]

Union 16. Jul 2008 15:02

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Mal was ganz anderes: Können die Werte nicht vor dem Eintrag in die DB auf Fehler getestet werden? Und falls der Scanner die Daten direkt über ein Tool reinschreibt: Man kann fast alle professionellen Scanner so programmieren, dass nur Codes mit einem bestimmten Aufbau als korrekt anerkannt werden. Gerade so eine einfache Regel wie "F" gefolgt von 9 numerischen Zeichen läßt sich dann einfach erstellen.

nachtstreuner60 16. Jul 2008 15:08

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Hallo Union,
danke für den Hinweis. Das habe ich mir auch schon überlegt.

Ich habe aber nur Zugriff auf Bestandsdaten, nicht schon vor dem Scannen. Die Scanner und das Erfassungstool sind von einer Fremdfirma.

Dieses Tool nimmt den gescannten Barcode entgegen, reichert diesen mit verschiedenen Daten an (z.B. Datum, Uhrzeit,ScannerID usw.
und schreibt dann dieses in ein Textfile.

Dieses Textfile wird dnach automatisch eingelesen in gewissen Zeitabständen und dann in diese Datenbank geschrieben.

Erst hier habe ich dann eine Überprüfungsmöglichkeit.

Trotzdem vielen Dank. Ich bin mir aber sicher, das es auch in der DB eine Möglichkeit geben muss, diese einfach per SQL auszusortieren.

mfg
Nachtstreuner60

Union 16. Jul 2008 15:10

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Zitat:

Dieses Textfile wird dnach automatisch eingelesen in gewissen Zeitabständen und dann in diese Datenbank geschrieben.
Und wie wäre es hier mit einem Trigger?

nachtstreuner60 16. Jul 2008 15:12

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Dazu müsste ich aber an den Quellcode dieses Tools kommen :pale:

Union 16. Jul 2008 15:14

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Nein, den Trigger erstellst Du (die Berechtigungen vorausgesetzt) in der Datenbank. Der könnte dann die fehlerhaften einträge z.B. in eine separate Tabelle schreiben.

nachtstreuner60 16. Jul 2008 15:15

Re: Falsche Zeichen in einem DB-Feld per SQL finden
 
Hallo

gibt es vielleicht eine Möglichkeit, zu prüfen ob es sich ab der zweiten Stelle, also ohne dem 'F' um eine Zahl handelt order nicht
z.B
F und ab hier 000345 = eine ZAHL
F und ab hier 00/345 = keine Zahl

Hat jemand eine Lösung hierfür ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.
Seite 1 von 4  1 23     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-2025 by Thomas Breitkreuz