AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Alphanumerische Werte eingrenzen (ähnlich Between)
Thema durchsuchen
Ansicht
Themen-Optionen

Alphanumerische Werte eingrenzen (ähnlich Between)

Ein Thema von blawen · begonnen am 13. Sep 2015 · letzter Beitrag vom 14. Sep 2015
 
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
654 Beiträge
 
Delphi 12 Athens
 
#7

AW: Alphanumerische Werte eingrenzen (ähnlich Between)

  Alt 13. Sep 2015, 23:06
Wieso sollte bei <= '100', 150 angezeigt werden?
Sorry, war ein dummer Tippfehler im Posting (200 wäre der korrekte Wert, habe ich im Posting korrigiert).

Aktuell habe ich es so gelöst, dass zuerst ein 'between' versucht wird. Führt dies zu keinem Ergebnis, mache ich eine neue Abfrage mit logischen Operatoren.
So komme ich zwar zu meinen Daten, aber dies müsste doch sicher einfacher gehen.

Delphi-Quellcode:
// Da Between nur numerische Werte enthalten darf und die logischen Operatoren
// bei rein numerischen Werten wiederum keine Datenmenge zurückliefern, wird
// aktuell dieser Workarround benutzt.
// Da Alphanumerische Werte bei einer between Abfrage zu einer Exception führen,
// wird dies in ein "try-except" verpackt
try
  quSuchen.SQL.Text := 'Select * from REPARATUR INNER JOIN ' +
                       '(MATERIAL) ON ' +
                       'REPARATUR.MATERIAL_ID = MATERIAL.MATERIAL_ID AND ' +
                       'MATERIAL.MATERIALNR = :MaterialNr AND ' +
                       '(REPARATUR.SERIENNUMMER between :SerNr_Start AND :SerNr_Ende)';

  quSuchen.ParamByName('MATERIALNR').AsString := edMaterialNr.Text;
  quSuchen.ParamByName('SerNr_Start').AsInteger := StrToInt(edSerienNr_Start.Text);
  quSuchen.ParamByName('SerNr_Ende').AsInteger := StrToInt(edSerienNr_Ende.Text);
  quSuchen.Active := True;
except
end;

if quSuchen.RecordCount = 0
then begin
  try
    quSuchen.SQL.Text := 'Select * from REPARATUR INNER JOIN ' +
                         '(MATERIAL) ON ' +
                         'REPARATUR.MATERIAL_ID = MATERIAL.MATERIAL_ID AND ' +
                         'MATERIAL.MATERIALNR = :MaterialNr AND ' +
                         '(REPARATUR.SERIENNUMMER >= :SerNr_Start AND ' +
                         ' REPARATUR.SERIENNUMMER <= :SerNr_Ende) AND ' +
                         'REPARATUR.DATUM BETWEEN :Datum_Start AND :Datum_Ende';

    quSuchen.ParamByName('MATERIALNR').AsString := edMaterialNr.Text;
    quSuchen.ParamByName('SerNr_Start').AsString := edSerienNr_Start.Text + '%';
    quSuchen.ParamByName('SerNr_Ende').AsString := edSerienNr_Ende.Text + '%';
    quSuchen.ParamByName('DATUM_START').AsDate := edDatum_Start.Date;
    quSuchen.ParamByName('DATUM_ENDE').AsDate := edDatum_Ende.Date;
    quSuchen.Active := True;
  except
  end;
end;
Roland

Geändert von blawen (13. Sep 2015 um 23:15 Uhr)
  Mit Zitat antworten Zitat
 


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 08:06 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