AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Absolute Database: NULL und String
Thema durchsuchen
Ansicht
Themen-Optionen

Absolute Database: NULL und String

Ein Thema von MCXSC · begonnen am 22. Sep 2006 · letzter Beitrag vom 23. Sep 2006
Antwort Antwort
MCXSC
(Gast)

n/a Beiträge
 
#1

Absolute Database: NULL und String

  Alt 22. Sep 2006, 02:49
Datenbank: Absolute Database • Version: 5.05 • Zugriff über: SQL
Hallo!

Ich habe folgendes Problem:

Ich verwende die Absolute Database und greife darauf nur mit ABSQuery-Kompo zu (also ohne einen DataSource, nur über die "SQL"-Funktion der Kompo).

Ich erstelle nun eine Datenbank, in der alle Felder den Default NULL haben:

sql.add(' feld1 VARCHAR(255) default NULL,'); Nun trage ich mit Hilfe folgender Codezeile einen Wert in diesem Feld ein:

Delphi-Quellcode:
if trim(edit_feld1.text) = 'then sql.add(' NULL, ')
else sql.add(' '''+trim(edit_feld1.text)+''', ');
Die beiden Ausschnitte sind nur Teilzeilen, denn das Funktioniert ohne Probleme.

Nun beginne ich, dieses Feld auszulesen und in einem Edit-Feld zu speichern:

edit_feld1_neu.text := FieldValues['feld1']; Das funktioniert auch ganz gut... Aber eben nur solange der Wert nicht NULL ist. Ist der Wert NULL, so bekomme ich folgende Fehlermeldung:

"Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden."

Ich verzweifel da grad echt dran... Gibt es da nicht eine Möglichkeit, den Wert erst zu prüfen und falls der Wert eben NULL ist einen Leerstring ('') an Delphi zu übergeben?

Danke im vorraus,
MCXSC
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Absolute Database: NULL und String

  Alt 22. Sep 2006, 04:31
Moin,
Absolute Database und ihre Kompos kenne ich leider nicht.
Mit ZEOS z.B., kannst du die Fields mit FieldByName('feld1').IsNull auf NULL prüfen. Evtl. bietet ABS dies auch.

Oder du stellst die SqlQuery anders:SELECT feld1|'FROM tabelle; Hab ich nicht probiert, sollte aber funktionieren.

Generell würde ich aber die Default-Werte der Tabellenfelder nicht auf NULL sondern auf '' setzen.sql.add(' feld1 VARCHAR(255) default '''','); Dann hätte sich das Problem von vornherein erledigt.

Ich hoffe, es hilft.
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#3

Re: Absolute Database: NULL und String

  Alt 22. Sep 2006, 05:02
So, hab es mal durchgetestet...

Mit Hilfe von

if FieldByName('feld1').IsNull then klappt es. Danke dafür!


***---***


Allerdings habe ich das Gefühl, dass (zumindest für Absolute Database)

sql.add(' feld1 VARCHAR(255) default NULL,') und

sql.add(' feld1 VARCHAR(255) default '''','); das Gleiche sei...? Jedenfalls kommen da bei beiden Möglichkeiten die gleichen Fehler...


***---***


Sorry, aber was bewirkt

SELECT feld1|'' FROM tabelle; Wenn ich das so schreibe, bekomme ich die Fehlermeldung "Unterminated String at..."
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Absolute Database: NULL und String

  Alt 22. Sep 2006, 07:35
Hallo Marcel,

SQL und NULL-Werte - darüber sind schon ganze Bücher geschrieben worden. Dein konkretes Problem kannst du auch so lösen:

Delphi-Quellcode:
uses
  Variants;

begin
  // ...
  edit_feld1_neu.Text := VarToStr(FieldValues['feld1']);
  // ...
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#5

Re: Absolute Database: NULL und String

  Alt 22. Sep 2006, 21:20
Ja ich weiß... Aber da steht für mich teilweise zu viel drin. Ich kann in mySQL nur das nötigste und nur das was ich brauche

Aber die Funktion VarToStr() funktioniert! Danke... Damit spar ich dann doch nochma ein wenig Code!
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#6

Re: Absolute Database: NULL und String

  Alt 23. Sep 2006, 01:30
Moin

In AbsoluteDatabase gibt eine schöne Möglichkeit, schon im SQL-Statement ein Feld auf NULL abzufragen und ggf mit einem bestimmten Wert vorzubelegen und somit im Ergbenis dann gleich fertige Werte zu erhalten, die nicht im anschließenden COde 'umformatiert' werden müssen:
Code:
SELECT
   CASE WHEN feld1 IS NULL THEN 'irgendeinwert' ELSE feld1 END feld1,
   COALESCE(feld2,'wert wenn feldinhalt NULL),
   feld3...
FROM test
Interessant ist hier die Zeile CASE WHEN...: dies prüft, ob das feld1 NULL ist (oder auch '') und belegt es in diesem Beispiel mit dem String irgendeinwert -das kann aber ein ein Leesrtring sein; ist das feld1 nicht leer, dann nimm den Feldinhalt von feld1 und gebe ihn aus.
Das ganze funktioniert natürlich auch mit Integer- oder Floatfeldern

Die zweite Anweisung COALESCE überprüft auch das feld2 auf NULL und gibt dann enstprechend den angebenen Wert wert wenn feldinhalt NULL aus (auch nur als exemplarischer Wert), ansonsten halt eben den Inhalt des feld2, wenn dieses nicht NULL ist...
Das mal so als Tipp...
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#7

Re: Absolute Database: NULL und String

  Alt 23. Sep 2006, 04:41
@raiguen:

Danke für den Hinweis. Aber ich habe mich doch für die VarToStr()-Methode entschieden da ich die Werte aus der DB an eine Funktion weitergebe und ich dadurch eben sehr viel Code spare... Aber gebrauchen kann man es sicherlich nochmals
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Absolute Database: NULL und String

  Alt 23. Sep 2006, 12:19
Hallo Leute,

die Entscheidung, ob ein NULL-Wert bereits auf dem Server oder erst beim Client behandelt wird, ist nicht über das Knie zu brechen. Ich hatte es bereits erwähnt - NULL-Werte in relationalen Datenbanken sind kein leichtes Thema und werden oft falsch verstanden oder benutzt. Einige NULL-Werte kann ich bereits über DDL default constraints eliminieren - dazu gehören in der Regel diejenigen, die ich später umständlich über CASE oder COALESCE behandle. Durch foreign key contraints schlagen NULL-Werte dann doch irgendwann bis zum Client durch. Es gibt kein Universalrezept, Nachdenken ist notwendig.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:36 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