AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Interbase und Felder die NICHT null sein dürfen
Thema durchsuchen
Ansicht
Themen-Optionen

Interbase und Felder die NICHT null sein dürfen

Ein Thema von Albi · begonnen am 21. Jun 2004 · letzter Beitrag vom 21. Jun 2004
Antwort Antwort
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#1

Interbase und Felder die NICHT null sein dürfen

  Alt 21. Jun 2004, 07:58
Guten morgen,

Ich habe eine IB-DB und will, das mir die Datenbank eine Fehlermedlung ausgib wenn Felder die "Not Null" deklariert sind nicht mit einem Wert besetzt worden sind.

Wenn ich das direkt auf der DB ausprobiere gib es eine Fehlermeldung, wenn ich jedoch das vom Programm aus mache werden diese Einstellungen einfach übergangen. Woran liegt das?

Ich verwende zum einfügen der DS eine StoredProc, liegt daran und ich sollte besser eine DataSet-Kompo nehmen?

Danke
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Interbase und Felder die NICHT null sein dürfen

  Alt 21. Jun 2004, 10:29
Die Datenbank sorgt in jedem Fall dafür, dass Felder mit dem Attribut NOT NULL einen gültigen Wert erhalten. Sie schützt also ihre Tabellen vor ungültigen Daten, gleichgültig ob deine
Andendung das mitbekommt oder nicht.

Jetzt kommt es natürlich darauf an, was in deiner Stored Procedure drin steht.

> Ich verwende zum einfügen der DS eine StoredProc, liegt daran und ich sollte besser eine
> DataSet-Kompo nehmen?
Man kann nicht sagen, dass eine Dataset-Komponente besser wäre, allerdings ist der Zugriff
auf die Tabellen direkter (aber nicht unbedingt schneller) und damit solltest du Einfüge- oder Update-Fehler direkt als Exception geliefert bekommen.
Andreas
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#3

Re: Interbase und Felder die NICHT null sein dürfen

  Alt 21. Jun 2004, 11:38
Gib es denn eine Möglichkeit, eine Excepion der DB an den Client zu senden?

Ich habe in meiner DB das Feld PlzOrtID, wenn ich direkt auf der DB arbeite und die Felder einfüge und das Feld PlzOrtID keinen Wert enthält bekomme ich ne Meldung. Wenn ich jedoch die Felder aus dem Client heraus ausfülle und ich lasse dort die Eingabe für die PlzOrtID weg, dann wird in der DB das Feld Feld einfach "NULL" eingetragen und das sollte doch eigentlich nicht sein.

Wie kommt das, das die DB selber da meckert aber den Client anscheinend egal ist?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Interbase und Felder die NICHT null sein dürfen

  Alt 21. Jun 2004, 12:22
Zitat von Albi:
Gib es denn eine Möglichkeit, eine Excepion der DB an den Client zu senden?
Üblicherweise werden Fehlermeldungen vom Datenbanktreiber auf der untersten Ebene über Returncodes zurückgegeben.
Die Kapselung, die die VCL um die Treiber legt, übersetzt diese Returncode in Exceptions.
Du als Anwender der Datenbank-Komponenten brauchst dich darum eigentlich gar nicht zu kümmern.
(Es sei denn, die Komponenten arbeiten nicht "Delphi-like")

Zitat von Albi:
Ich habe in meiner DB das Feld PlzOrtID, wenn ich direkt auf der DB arbeite und die Felder einfüge und das Feld PlzOrtID keinen Wert enthält bekomme ich ne Meldung. Wenn ich jedoch die Felder aus dem Client heraus ausfülle und ich lasse dort die Eingabe für die PlzOrtID weg, dann wird in der DB das Feld Feld einfach "NULL" eingetragen und das sollte doch eigentlich nicht sein.
Das darf eigentlich überhaupt nicht passieren !!
Zum Test, dass du keinem Irrtum unterliegt probiere Folgendes:
Erzeuge mit deiner Anwendung einen Datensatz, der im Feld PlzOrtID den NULL-Wert enthält.
Gehe direkt auf die Datenbank (mit IBconsole, oder ?) und ändere ein anderes Feld (z.B. Ortsname)
und bestätige die Änderungen. Nun sollte die Fehlermeldung betreffend PlzOrtID kommen.
Ein Stringfeld kann einen leeren String enthalten oder es kann den Inhalt 'Null' enthalten,
das ist aber nicht das gleiche wie der echte NULL-Wert.
Also versuche auch mal mit IBConsole den Inhalt "NULL" zu editieren, sollte das gelingen, handelt
es sich einfach um einen String, der zufällig den Inhalt "NULL", aber nicht um den echten NULL-Wert.

Versuche auf jeden Fall die neuesten Treiber sowie evtl. ein Update für IB aus dem Internet zu ziehen.
Andreas
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#5

Re: Interbase und Felder die NICHT null sein dürfen

  Alt 21. Jun 2004, 12:42
Genau das was du eben beschrieben hast, mit der IBConsole, ist ja mein Problem. Die DB erkennt das richtig.

Also gib der Client keinen richtigen NULL-Wert zurück sondern einfach nur NULL. Somit ist es für die Korrekt obwohl es doch nicht korrekt ist.

Zur veranschaulichung, ich habe in meinem Prog das Feld PLZ und eine CBBox Ort (eine Table Stammdaten und PLZOrt). Ich gebe eine PZL und beim verlassen werden alle Orte in die CBBox eingetragen die zur PLZ passen. Wenn ich nun in CBBox einen Ort aussuche, wird über das onChange-Ereignis die Entsprechende ID der PLZ-Ort Kombination aus der Table PLZOrt gesucht und soll in Table Stammdaten gespeichert werden. Wenn nun aus irgendeinem Grund die ID fehlt sollte es einen Fehler geben aber in der entsprechenden Spalte der Table steht dann "NULL".

Ich will jetzt wissen, wie das verhindern kann. Ich dachte erst es liegt einfach an kommunikation zwischen der DB und dem Client aber es scheint doch mein Fehler zu sein.

Danke
  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 18:48 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