Probleme mit Kontrollkästchen im Access Frontend

Liebe Leute,

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?

Vermutlich wird er nicht wissen, wie er das Logging aller Befehle einschaltet.

log_statement = all

An in der postgresql.conf dreas

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.

Das mit dem Zeichen zuviel ist Bullshit:

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?

Andreas

Das Problem ist, das PostgreSQL das “-1” nicht als gültigen Wert für ein BOOLEAN Feld akzeptiert (warum sollte es auch).

Du könntest einen Cast dafür schreiben (siehe Dokumentation für CREATE CAST), der die Eingabe umwandelt.

Das ist mir schon klar. Aber selbst für einen wie mich ist es nicht sofort glaubwürdig, daß Access derart Scheiße ist, daher fragte ich nach.

Du könntest einen Cast dafür schreiben (siehe Dokumentation für CREATE CAST), der die Eingabe umwandelt.

jepp

Andreas

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.

Gruß Uwe

tja auch das “true” wird in “-1” gewandelt:

Eine mögliche Lösung ist:

  1. in der ODBC-Verbindung “bools as char” ausschalten
  2. 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’;


CREATE OPERATOR = (
LEFTARG = BOOL,
RIGHTARG = INT4,
PROCEDURE = MsAccessBool,
COMMUTATOR = ‘=’,
NEGATOR = ‘<>’,
RESTRICT = EQSEL,
JOIN = EQJOINSEL
);

Tabellen in Access neu verknüpfen, etc.

Funzt.

Trotzdem Danke!!