AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit NULL-Werten
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit NULL-Werten

Ein Thema von Hansa · begonnen am 31. Jan 2003 · letzter Beitrag vom 3. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Problem mit NULL-Werten

  Alt 31. Jan 2003, 13:45
Hi,

ich übernehme hier Daten aus einer Textdatei in eine Interbase Datenbank, bzw. will ich in diesem Fall bisher nicht vorhandene Felder mit einem gültigen Wert vorbesetzen:
Code:
   
    LiefDS.FindField ('ABHOLUNG').AsString := '0';
    LiefDS.FindField ('BANKEINZUG').AsString := '0';
showmessage ('*'+LiefDS.FindField ('BANKEINZUG').AsString+'*');
Diese beiden Felder sind definiert als CHAR (1). Sehe ich mir in der Konsole die Werte an, steht bei dem ersten wirklich 0 drin, bei dem zweiten aber NULL ! Ändere ich das ganze von '0' auf '1' steht bei dem ersten 1 und bei dem zweiten wieder NULL !!! Sag mir mal einer, wie so etwas möglich ist. Die Showmessage zeigt '*0*' an, wegen der *chen sehe ich, daß da nicht noch andere Zeichen vorhanden sind.

Gruß
Hansa
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#2
  Alt 31. Jan 2003, 19:47
hallo Hansa

Hast Du ev. auf der Tabelle einen Trigger, der den Wert zurücksetzt?

Gruss
Xaver
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 31. Jan 2003, 19:58
Gute Idee !

die Trigger darf ich nicht aus den Augen verlieren, aber ich habe nur einen für die IDs gesetzt. Die Felder, die ich als Beispiel genommen habe sind relativ unwichtig, der Effekt aber nicht. Die Table, bei der mir das auffiel hat ca. 30 Felder, aber ich habe welche mit 300 oder noch mehr, soll ich die jetzt alle überprüfen, bei zig-tausend Datensätzen ? Bin gerade dabei, alle Programme neu zu compilieren und laufen zu lassen, dauert ewig, na denn . Werde nachher mal sehen.

Gruß
Hansa
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#4
  Alt 31. Jan 2003, 20:07
Na ja war so eine Idee. Bin selber einmal in eine solche Falle gelaufen.

Hier noch eine Idee. Hast Du ev. eine Maske auf das Feld gelegt?

Gruss
Xaver

PS: Ich glaube Du trinkst etwas zu viel oder hast Du einen soooo langsamen Rechner, dass Du die Compile-Zeit mit einem Kühlen Blonden überbrücken musst?
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#5
  Alt 31. Jan 2003, 20:18
Hi Hansa,

was sein könnte - ohne dass ich Dir Schludrigkeit vorwerfen möchte - der Datentyp von BANKEINZUG ist eventuell doch nicht CHAR(1). Ich schätze, beide Felder sollen Boolean Charakter haben (man hat Bankeinzug oder nicht).

Die Empfehlung zur Repräsentierung dieses Datentyps in Interbase ist ja eine Domain die in etwa so aussieht:
Code:
CREATE DOMAIN DM_BOOL AS SMALLINT DEFAULT 0 CHECK (VALUE BETWEEN 0 AND 1);
Also Integer. Falls der Aufwand vertretbar ist, würde ich die Datenbank entsprechend umbauen.

gruß, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6
  Alt 31. Jan 2003, 20:20
haha, Compilier-Zeit. Es geht um Datenübernahme. das ist purer Code und pure Daten. Nur ein Memo-Feld, damit man sieht, daß was passiert. Aber es sind ca. 100 MB Daten, die aus Textdatei in die DB rein müssen. Außerdem habe ich einen älteren Rechner für diese Aufgabe vorgesehen und das im Netz. Übernachten will ich aber trotzdem daheim.
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#7
  Alt 31. Jan 2003, 20:22
So kannst Du ja auch übernachten
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8
  Alt 2. Feb 2003, 20:15
Ich glaub ich werd noch verrückt. Ich habe die DB jetzt komplett neu aufgebaut, Null-Werte sind immer noch da. Ich hab jetzt einen näher unter die Lupe genommen. Und zwar email eines Lieferanten. Bei Kunden gibt es die auch. Jetzt ist folgender Effekt festzustellen : Der Wert, der mit FindField gesetzt wird, wird nicht angenommen (bei Lieferanten).

Mach ich nun folgendes:

Code:
ALTER TABLE LIEF8 ALTER EMAIL TO LIEFEMAIL
und lasse das Programm, das die Konvertierung macht neu laufen, nachdem ich die Table komplett leer gemacht habe, so funktioniert alles.

Alle Felder behandele ich ungefähr so :

Code:
LiefDS.FindField ('LIEFEMAIL').AsString := copy (zeile,585,30);
Vor der Umbenennung des Feldes sah das ganze eben so aus:

Code:
LiefDS.FindField ('EMAIL').AsString := copy (zeile,585,30);
Wenn ein Feldname in zwei verschiedenen Tabellen benutzt wird, so gibt das doch keinen Fehler, oder doch? Dann dürfte ich aber doch keine ID benutzen, bzw. für jede Tabelle einen anderen Bezeichner. Also ich raffe das nicht mehr.


Gruß
Hansa
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#9
  Alt 3. Feb 2003, 05:14
Hallo Hansa

Zuerst eine Frage:
Liest Du die Daten mit einem Select-Statement aus der Datenbank? Hast Du ev. in diesem Select beide Tabellen als Join drin?
Zum Beispiel so:
Code:
select * from Kunde, Lieferant
Wenn das der Falle ist, dann funktioniert Dein Update oder Insert garantiert nicht mit den gleichen Feldnamen.

Ich nehme aber nicht an, dass eine alter Hase wie Du so einen Fehler macht!

Für mich sieht das nach einem Fehler im DB-Servers aus. Hatte das vor Jahren (10 Jahre) einmal auf einem Unify-DB-Server auf Unix. Ich habe mir damals angewöhnt, dass die Datenbank-Felder immer mit einem Kürzel der Tabelle versehen sind.
Beispiel:
Code:
Tabelle: Address
Felder: Adr_Num, Adr_Name usw.
Das bringt zudem den Vorteil, dass Du nicht immer mit Substitutes arbeiten musst, wenn Du einen Join benötigst. Wahrscheinlich bringt Dir aber dieser Hinweis nichts, da Dein Programm ja schon steht. Wir mussten damals alle Applikationen anpassen Hatte uns im Zeitplan um zwei Monate zurück geworfen.

Gruss
Xaver
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 3. Feb 2003, 07:46
Zitat von xbu58:
Liest Du die Daten mit einem Select-Statement aus der Datenbank?
Daten kommen alle aus einer Textdatei. In jeder Zeile steht ein Datensatz. Die wird nur zerbröselt und dann, wie beschrieben, die einzelnen Felder in die DB eingetragen.

Zitat von xbu58:
Für mich sieht das nach einem Fehler im DB-Servers aus.
Kann fast nur so sein. Soweit bin ich auch schon. Deshalb werde ich das ganze jetzt mal mit IB 7 testen. Mit denselben Scripts, dem selben Delphi Programm usw. Wie eine leere DB gefüllt wird, da bin ich ja jetzt fast Spezialist. Desweiteren werde ich die Frage jetzt auch noch auf englisch übersetzen und sie noch woanders stellen.

Zitat von xbu58:
...dass Du nicht immer mit Substitutes arbeiten musst, wenn Du einen Join benötigst....Wir mussten damals alle Applikationen anpassen Hatte uns im Zeitplan um zwei Monate zurück geworfen.
Meinst Du da sowas wie : "SELECT FROM kunde k, lieferant l..." ? 2 Monate sinds noch nicht, aber im Endeffekt trotzdem mind. eine Woche.

Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:34 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