August 19, 2022, 21:54:30

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


ODBC speichert keine Daten

Begonnen von msahelp, Dezember 12, 2021, 10:10:39

⏪ vorheriges - nächstes ⏩

msahelp

Dezember 12, 2021, 10:10:39 Letzte Bearbeitung: Dezember 12, 2021, 22:30:11 von msahelp
Guten Tag zusammen

Ich verwende MS Access seit der Version 2.0. Jetzt vor etwa 1 Monat habe ich angefangen ein Datenbank zu Bauen, welche sowohl lokal (im Access selbst) als im Browser Daten angesehen und geändert werden können.

Nun mein wahrscheinlich für euch ein kleines Problem, aber für mich nicht ganz nachvollziebares.

Ich gebe im Browser 2 Werte ein und möchte die Daten speichern, kommt die folgende Meldung:
==
Warning: odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Operation muss eine aktualisierbare Abfrage verwenden., SQL state S1000 in SQLExecDirect in Pfad\sqllogin.php - Fehler beim Insert
==
Gebe ich die Daten direkt ein gehts. Also hat die Datei genügend Rechte.

Hier paar Infos das System:
Client: Windows 10
Server mit IIS, PHP,ODBC
System: Windows Server 2021R2 64bit
IIS 8
PHP 8
ODBC 32bit
MSAccess Treiber (Standard von ODBC) 6.03.9600.17415
Access 2016
Rechte auf den Odner/Datei auf welchem die Datenbank und PHP Datei liegt hat IIS_IUSRS folgende Rechte: Ändern, Lesen/Ausführen, Schreiben.

Dank für euren Tipp
Gruss und schöne Adventszeit
Yves

markus888

Also wenn man die Fehlermeldung ernst nimmt, dann muss man sich erstmal die Abfrage ansehen.


10 Jahre Access

msahelp

So sieht meine Tabelle aus
https://ibb.co/JxKdhvP

Meine PHP Datei sieht so aus.
==
<?php
ini_set("display_errors",true);
error_reporting(E_ALL);
$_DSN = "db";
$_User = "user";
$_PW = "pass";
$conn = odbc_connect($_DSN, $_User, $_PW) or die("Verbindung fehlgeschlagen");
$Vvariable1= $_POST["Fvariable1"];
$Vvariable2= $_POST["Fvariable2"];
$query1 = "INSERT INTO loglogin (
        usercode,
        pw
   )
        VALUES (
        '$Vvariable2',
        '$Vvariable2'
        )";
odbc_exec($conn,$query1) or die("Fehler beim Insert");

?>

Ich sehe also nichts, wo nicht stimmen würde.

markus888

Zur Nutzung der Datenklasse und PHP kann ich nichts sagen, das ist bei mir schon zu lange her.
Weißt du wie man mit PHP SQL Strings korrekt formatiert - also Text, Datum und Gleitkommazahl?

Was mich grundsätzlich wundert:
Warum hat die Tabelle keinen Primärschlüssel?
Warum verwendest du keine Parameterabfragen - kann das der Treiber nicht?
10 Jahre Access

msahelp

- Die PHP SQL-Datei speichert nur Text (Benutzer/Passwort) ab. Das Datum schreibt das Access selbst in die Tabelle, wenn der Datensatz vom SQL in die Tabelle gespeichert wird.
- Primärschlüssel brauche ich nicht, weil zugriff als Standardwert (jetzt) hat. Also schreibt er jedes Mal das aktuelle Datum und Uhrzeit. Ich finde das ist etwa gleich gut wie ein Primärschlüssel.
- Was meinst du mit Parameterabfragen?

Lese ich Daten aus der Datenbank aus, funktioniert es einwandfrei über die ODBC. Nur das speichern Daten aus der im Beitrag "12.12.21 16:26:38" geschriebene PHP-Datei.

PhilS

Zitat von: msahelp am Dezember 12, 2021, 17:39:19Primärschlüssel brauche ich nicht, weil zugriff als Standardwert (jetzt) hat. Also schreibt er jedes Mal das aktuelle Datum und Uhrzeit. Ich finde das ist etwa gleich gut wie ein Primärschlüssel.
Ähem, es mag sein dass du keinen Primärschlüssel brauchst, es könnte aber sein, dass die ODBC-Engine das anders sieht.

Außerdem scheint mir deine Definition von "Primärschlüssel" etwas eigenartig zu sein.

Anderes Thema:
Du könntest mal, nur vorübergehend für Diagnosezwecke, dem Windows Benutzer "Jeder" Vollzugriff auf den Ordner geben, der die Datenbankdatei enthält.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

msahelp

Danke für den Tipp
Die Datenbank habe ich ausgegliedert in einen separaten Ordner. Diesem und die darin befindenden Dateien habe ich folgenden Benutzer "iusr" und "iis_iusr" die Berechtigung "Vollzugriff" gegeben.
Den Ordner in der die PHP Dateien liegen brauchen die beiden Benutzer "iusr" und "iis_iusr" nicht.
Nun kann ODBC den Wert in die Datenbank speichern.