Leere Zeichenfolge in SQL-Server via ODBC

14/11/2008 - 15:58 von Rene | Report spam
Hallo NG,

bin neu hier, also auch dankbar für nen Link, falls schon mal gefragt.


Mache gerade eine Migration eines MDB-Backends nach SQL Server 2k. Hatte
mir angewöhnt, wenn möglich, in den Tabellen-Spalten-Definitionen
NULL-Werte zu vermeiden und dafür Leere Zeichenfolgen zuzulassen.

Löschte ich im MDB-Backend einen so definierten Text-Wert in einer
Tabelle mit <Entf>, speicherte Access automatisch einen Leerstring in
diesem Feld.

Nicht so beim migrierten Backend (via ODBC vom SQL Server eingebundene
Tabellen). Lösche ich nun einen Wert aus einer als Text (ohne NULL
zulassen!) definierten Spalte, kommt die Fehlermeldung "Sie wollten den
NULL-Wert einer Variablen zuweisen, die nicht den Datentyp variant hat".

Access will offensichtlich nicht automatisch einen Leerstring sondern
den NULL-Wert speichern. Wàre jetzt für mich doof, eine DB mit ca. 100
Tabellen umzustellen, indem bei den relevanten Feldern NULL-Werte
erlaubt würden.

Das Problem macht sich für den Anwender im Frontend beim Löschversuch
von Werten optionaler Felder bemerkbar. Als Standardwert für solche
Textfelder habe ich natürlich die Leere Zeichenkette "" eingestellt.
Allerdings tritt der Fehler unmittelbar beim verlassen des
entsprechenden Feldes auf. Der SQL-Server hat somit gar nicht erst die
Möglichkeit, dem NULL-Wert-Feld den Standardwert zuzuweisen.


Hat da einer ne Idee, wie man das Problem elegant lösen kann? Mein
erster Ansatz, das Form_Error-Ereignis abzufangen, scheint mir zu
umstàndlich.


Viele Grüße!
René.
 

Lesen sie die antworten

#1 Hans-Werner Stamer
15/11/2008 - 12:34 | Warnen spam
Hallo Rene:

...
Mache gerade eine Migration eines MDB-Backends nach SQL Server 2k. Hatte
mir angewöhnt, wenn möglich, in den Tabellen-Spalten-Definitionen
NULL-Werte zu vermeiden und dafür Leere Zeichenfolgen zuzulassen.



Eine Einstellung leere Zeichenfolgen zulassen ja/nein gibt es im SQL Server
nicht. Ist eine Spalte z.B. VARCHAR(n) NOT NULL definiert, funktioniert ein
UPDATE <tabelle> SET <feld> = '' problemlos.

Löschte ich im MDB-Backend einen so definierten Text-Wert in einer
Tabelle mit <Entf>, speicherte Access automatisch einen Leerstring in
diesem Feld.

Nicht so beim migrierten Backend (via ODBC vom SQL Server eingebundene
Tabellen). Lösche ich nun einen Wert aus einer als Text (ohne NULL
zulassen!) definierten Spalte, kommt die Fehlermeldung "Sie wollten den
NULL-Wert einer Variablen zuweisen, die nicht den Datentyp variant hat".



Jo, eine leere Zeichenkette wird von Jet in Verbindung mit ODBC als
Null-Wert betrachtet.
Um ein Not Null Feld zu leeren muss tatsàchlich "" eingegeben werden.
Daraus wird dann von Jet/ODBC eine leere Zeichenkette gemacht.

Access will offensichtlich nicht automatisch einen Leerstring sondern
den NULL-Wert speichern. Wàre jetzt für mich doof, eine DB mit ca. 100
Tabellen umzustellen, indem bei den relevanten Feldern NULL-Werte
erlaubt würden.

Das Problem macht sich für den Anwender im Frontend beim Löschversuch
von Werten optionaler Felder bemerkbar. Als Standardwert für solche
Textfelder habe ich natürlich die Leere Zeichenkette "" eingestellt.
Allerdings tritt der Fehler unmittelbar beim verlassen des
entsprechenden Feldes auf. Der SQL-Server hat somit gar nicht erst die
Möglichkeit, dem NULL-Wert-Feld den Standardwert zuzuweisen.
...



Mir ist leider keine Möglichkeit bekannt, wie dieses Verhalten umgestellt
werden kann.

Du könntest einen Button "Feldinhalt löschen" auf das Formular platzieren
(oder eine Taste dafür hernehmen) mit etwa folgendem Code dahinter:

Dim c As Control
Set c = Screen.PreviousControl
If c.ControlType = acTextBox Then
c.Value = ""
End If

Gruß
Werner

Ähnliche fragen