Laufzeitfehler 3155

Liebe Community

beim Ausführen folgenden Codes habe ich das Problem, dass mir PG einen Fehler verursacht. Mit MySQL geht es problemlos.
Woran könnte es liegen?

On Error GoTo btnAvailability_Click_error

   Dim s As String
   Dim x As Long
   
   If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord
   
   If Nz(Me![AssetID], "") <> "" Then
      s = "INSERT INTO tblDefaultAvailability ( DefAssetID, DefVBdayofweek, DefDayName, [DefIsAvailable?], DefDayStartTime, DefDayEndTime, DefLunchStartTime, DefLunchEndTime )"
      s = s & " SELECT """ & Me![AssetID] & """, [DefVBdayofweek], [DefDayName], [DefIsAvailable?], [DefDayStartTime], [DefDayEndTime], [DefLunchStartTime], [DefLunchEndTime]"
      s = s & " FROM tblDefaultAvailability"
      s = s & " WHERE ((([DefAssetID])=""Global""))"
      CurrentDb.Execute s
      x = CurrentDb.RecordsAffected
      
      DoCmd.OpenForm "frmAssetsAvailability", acNormal, , "[AssetID]=""" & Me![AssetID] & """", , acDialog
   End If
   
btnAvailability_Click_Exit:
Exit Sub

btnAvailability_Click_error:
Select Case Err
   Case 2501 'cancelled
      Resume btnAvailability_Click_Exit
   Case Else
      MsgBox Err & "-" & Error$, vbCritical + vbOKOnly, "Error in module btnAvailability_Click"
      Resume btnAvailability_Click_Exit
End Select

Bei der Zeile

CurrentDb.Execute s

springt mir die Datenbank gleich zum Errorhandler und gibt mir den Fehler

3155-ODBC: Einfügen in einer verknüpften Tabelle ‘tbldefaultavailability’ fehlgeschlagen.

.

Die Spalten DefAssetID, DefVBdayofweek sind beide Primary Key (das hat der vorhergehende DB-Entwickler so festgelegt), welche Auswirkungen ein Drop Constraint haben könnte weiss ich nicht. Zudem funktioniert die Syntax

ALTER TABLE public.tbldefaultavailability DROP CONSTRAINT DefVBdayofweek;

nicht.

Man kann doch SQL-Befehle im Frontend benutzen, wenn man PG verwendet, oder nicht?

Kann mir bitte jemand helfen?

Vielen Dank und Gruss

DrGonzo

ODBC-Fehler sind nicht wirklich informativ. Schau bitte, was PostgreSQL selbst sagt. Was enthält der String s konkret? Führe das DIREKT z.B. mittels psql aus.

Warum willst Du einen Primary Key löschen? “Syntax funktioniert nicht” ist eine unsinnige Fehlerbeschreibung.

Was steht im Postgres Log?

Okay, hat sich erledigt. Die Primärschlüssel waren das Problem - nach dem Essen mit vollem Bauch klappts wieder :slight_smile:

PS: Wollte den Primary Key löschen, weil es ja keinen Sinn macht, 2 PKs zu haben… sowas habe ich bisher noch nie gesehen, aber irgendwer hat das im MySQL vorher so gemacht. Jetzt habe ich eine neue Spalte erstellt, als PK und Autoincrement gesetzt und jetzt geht’s.

Du kannst nicht 2 PK’s haben. Auch nicht gehabt haben.

Ob dus mir glaubst oder nicht: In MySQL war das so! Um was willst du wetten?
Drum war ich auch verwirrt, siehe Screenshot
primkey.jpg

Du kannst einen PK aus mehreren Feldern machen, das ist dann aber ein PK. Und ja, manchmal macht das auch Sinn.

Gruß UWe

Siehe Gisman. Ein PK über 2 Spalten ist was anderes als 2 PK’s.