nutze Access als Frontend einer pg-DB. Viele Formulare enthalten Kontrollkästchen-Felder, die in der pg-DB als Datenfelder mit Typ “boolean” existieren.
Bei Setzen von Häkchen im Frontend erhalte ich die Meldung “Das Feld ist zu klein für die Datenmenge, die Sie hinzufügen wollten.” - Was ist zu tun - habe keine Idee (beim Wegnehmen eines Häkchens gibt es dementsprechend keine Probleme - funktioniert auch. Besser wäre es, wenn beides funktinierte).
Danke für die Hilfe!
Gut, diese Fehlermeldung hilft uns jetzt recht wenig.
Kannst du in deiner Datenbank mal in das Log schauen und gucken, was konkret Access da ändern möchte? Sprich, kommst du an den Query und die Fehlermeldung heran?
Tja, das ist so, dass Access beim Setzen von Häkchen - also setzen des Wertes auf “true” an postgres “-1” übermittelt - und das ist ein Zeichen zuviel. Das lässt sich auch mit nichts ändern, da Access den Wert “true” immer auf “-1” setzt, egal was man anstellt. Bin auf der Suche nach Lösung. By the way: logging war an und ist nicht hilfreich.
test=*# select 'true'::bool;
bool
------
t
(1 row)
Mein ‘true’ wäre nach Deiner Meinung ja sogar um 3 Zeichen zu lang.
Zeig doch mal, was exakt im Log steht und wie die Tabelle definiert ist, okay? Arbeitest Du mit ODBC? Würde es was bringen, SQL-Passthrough zu verwenden?
Du könntest im Frontend als Ereignis ‘Nach dem Ändern’ des Kästchens eine Variable mit dem Wert setzen, den Postgres haben will und diesen übergeben anstatt das orginalen Werts des Kästchens. Ich vermute, wie auch schon gesagt, daran wird der Fehler liegen.
in der ODBC-Verbindung “bools as char” ausschalten
Funktion in postgres:
DROP OPERATOR = (bool, int4);
DROP FUNCTION MsAccessBool (bool, int4);
CREATE FUNCTION MsAccessBool (bool, int4) RETURNS BOOL
AS ’
BEGIN
IF $1 ISNULL THEN
RETURN NULL;
END IF;
IF $1 IS TRUE THEN
IF $2 <> 0 THEN
RETURN TRUE;
END IF;
ELSE
IF $2 = 0 THEN
RETURN TRUE;
END IF;
END IF;
RETURN FALSE;
END;
’ LANGUAGE ‘plpgsql’;