AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [Firebird] TEXT Feld füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

[Firebird] TEXT Feld füllen?

Ein Thema von Nuclear-Ping · begonnen am 11. Apr 2008 · letzter Beitrag vom 12. Apr 2008
Antwort Antwort
Nuclear-Ping
(Gast)

n/a Beiträge
 
#1

[Firebird] TEXT Feld füllen?

  Alt 11. Apr 2008, 21:37
Datenbank: Firebird • Version: 2.0.3 • Zugriff über: ZEOS
Grüße,

ich expermentiere grad mit Firebird rum, um zu schauen, wie unsere Anwendung damit - statt Advantage - läuft. Klappt auch alles ganz gut soweit, nur habe ich mich grad mit einem Problem verstrickt, wo ich nicht so recht weiterkomme.

Ich habe eine Tabelle mit einem TEXT/NCHAR Feld.
SQL-Code:
CREATE TABLE Clients (
  Id INTEGER NOT NULL,
  Title VARCHAR(64),
  LastName VARCHAR(128) NOT NULL,
  FirstName VARCHAR(128),
  Address NCHAR,
  UseBirthData SMALLINT,
  BirthDateTime TIMESTAMP,
  BirthPlace VARCHAR(128),
  BirthCountry VARCHAR(128),
  Gender SMALLINT,
  UseManualGeoData SMALLINT,
  Longitude FLOAT,
  Latitude FLOAT,
  Zone TIMESTAMP,
  DST TIMESTAMP,
  ImageFile VARCHAR(128),
  IsActive SMALLINT,
  PRIMARY KEY (Id)
);
CREATE GENERATOR Clients_Id_Gen;
CREATE INDEX ClientsOrdinary ON Clients (LastName);
Wenn ich per Query nun einen Eintrag hinzufügen will...
SQL-Code:
INSERT INTO CLIENTS (TITLE, LASTNAME, FIRSTNAME, ADDRESS, USEBIRTHDATA, BIRTHDATETIME, BIRTHPLACE, BIRTHCOUNTRY, GENDER, USEMANUALGEODATA, LONGITUDE, LATITUDE, ZONE, DST, IMAGEFILE, ISACTIVE)
VALUES ('Herr', 'Mustermann', 'Max', 'Irgendnestrasse 12, 12345 Irgendwo', 0, NULL, NULL, NULL, 0, 0, 13.7777, 15.2, '12/30/1899 01:00:00', '12/30/1899 01:00:00', NULL, 1)
... erhalte ich folgende Fehlermeldung:
Zitat:
arithmetic exception, numeric overflow, or string truncation
Arithmetic overflow or division by zero has occurred.
Reduziere ich den Inhalt des Adressfeldes auf ein Zeichen ('Irgendnestrasse 12, 12345 Irgendwo' -> 'I') klappt es. Auch im ZDE (ZEOS Database Explorer) kann ich in dieses Feld nur ein Zeichen eintragen. Wenn ich mir die Spalteneigenschaften anschaue, steht da auch Typ: TEXT, Länge: 1.

Ist das TEXT/NCHAR-Feld nicht äquivalent mit dem MEMO-Typ? Wie kann ich da ein Textfeld abspeichern? Per BLOB?
  Mit Zitat antworten Zitat
Hansa

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

Re: [Firebird] TEXT Feld füllen?

  Alt 11. Apr 2008, 21:41
Was ist ein NCHAR ? Memo (Delphi) = Textblob (Blob Subtype ???)
Gruß
Hansa
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: [Firebird] TEXT Feld füllen?

  Alt 11. Apr 2008, 21:42
Die Datenbankstruktur hab ich per ZDD (ZEOS Database Explorer) erstellt und mir ein Script generieren lassen. Bei der Erstellung konnte ich halt als "String"-Felder "VARCHAR" und "NCHAR" wählen. Wobei mir bei VARCHAR ein Feld "Length" angeboten wurde, bei NCHAR nicht (ausgegraut / deaktiviert). Daher ging ich einfach davon aus, dass NCHAR wohl MEMO entspricht.

[edit]
Wenn ich dass Address-Feld in der CREATE-Query auf TEXT oder TEXTBLOB ändere, meckert er rum, dass er beides nicht kennt.
Zitat:
Specified domain or source column TEXT does not exist
This operation is not defined for system tables.
[/edit]
  Mit Zitat antworten Zitat
Thomas Horstmann

Registriert seit: 25. Apr 2007
86 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: [Firebird] TEXT Feld füllen?

  Alt 11. Apr 2008, 22:13
Hallo,

in Firebird/Interbase sollte für Text ein "Blob" mit "Subtype" verwendet werden.

SQL-Code:
...
Address blob sub_type text,
...

Viele Grüsse
Tom
  Mit Zitat antworten Zitat
kretabiker

Registriert seit: 10. Mär 2005
Ort: Bargteheide
183 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [Firebird] TEXT Feld füllen?

  Alt 12. Apr 2008, 09:07
Hi,

NCHARs - das sind doch VARCHARS mit einem "eingebauten" Characterset ISO8859-1, oder? Bei der NCHAR-Definition des Adressfelds fehlt die Längenangabe (synonym zu VARCHARs). Ich vermute mal, dass dann von Firebird automatisch die Länge 1 gesetzt wird.

Für lange Texte wäre ein BLOB mit Subtype 1 (für Text) sicherlich die richtige Wahl. Das sähe dann ungefähr so aus (hier eine Domain, die ich verwende, wenn es um das Abspeichern von einfachen Textmemos unbestimmter Länge geht):

CREATE DOMAIN TMEMO AS Blob sub_type 1;

Allerdings haben Collate Orders auf Blobs keine Auswirkung, so dass das Sortieren schwierig wird.

Greetings

Udo "Kretabiker" Treichel
Udo Treichel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: [Firebird] TEXT Feld füllen?

  Alt 12. Apr 2008, 09:52
Ah, jetzt machts klick!

Danke euch beiden.

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