Visual mit SQL

Gast #2416311
Lesenswert?

Hallo alle Zusammen,


ich versuche Datenbanken mit Visual Studio zu lesen.
Es klappt alles sehr gut nur mit eine Luxusproblem und zwar er ändert 
der Datum der Datenbanken, obwohl er nur gelesen hat.

Wie kann das ändern im dem er das Datum nicht ändern sollte?
gibt es eine fertige Methode, der diese Änderung verhindern.


Ich habe im internet"SQL_MODE_READ_ONLY" was gefunden, aber das weiss es 
nicht ob es brauchbar ist?


Danke für jeden Tips
Gast #2416339
Lesenswert?

als Beispiel wenn ich eine Datein (word, text) und nicht ändere dann 
muss es auch die alte Datum der Dateien gleich unverändert bleiben, weil 
es keine Änderung durchgefüht wurde.

Bei mir obwohl ich nur von der datenbanken nur lese ändert sich das 
Datum der dateien,ob es geändert wurde was nicht wahr ist!!!!!
#2416402
Lesenswert?

Peter II schrieb:
> Welche Datenbank, welches Datum ändert sicht?
Wie PeterII schon geschrieben hat:
Meine Güte kannst du mal etwas konkretere Angaben machen.
Meinst du Oracle, DB/2, MySql, SQL Server oder etwa über das unsägliche 
Access?
Wie programmierst du die Datenbank. Über native Treiberbibliotheken oder 
über ODBC oder was?
Welche Programmiersprache? Basic C-sharp, C++, J++, ...
Gast #2419233
Lesenswert?

Hallo,

ich habe es probiert den Befehl "SQL_MODE_READ_ONLY", aber es ändert 
isch nichts.

Die Datenbanken (mdb) ändern sich bei jede Öffnung, obwohl es  nur 
geöffnet waren und keine Änderungen durchgeführt worden.


Hat jemenden eine Idee, wo es daran liegen könnte?

Für jede Hilfe bin ich dankbar
Gast #2419258
Lesenswert?

simo schrieb:
> Hat jemenden eine Idee, wo es daran liegen könnte?

nein, aber warum stört dich das? Du könntest mal verscuchen die 
Datei-Ready-Only zu machen.

> ich habe es probiert den Befehl "SQL_MODE_READ_ONLY", aber es ändert
> isch nichts.
was meinst du als Befehl? "SQL_MODE_READ_ONLY" ist maximal ein Paramete 
aber kein befehl. Wo gibt du ihn denn überhaupt ein?
Gast #2419289
Lesenswert?

> aber kein befehl. Wo gibt du ihn denn überhaupt ein?
ich gebe den Parameter bei der Methode:


// Connect!
DB = SQLDriverConnect(conn_h, NULL, (SQLCHAR*) _dsn.c_str(),
          SQL_NTS,
          (SQLCHAR*) szConnectOutput,
          _countof(szConnectOutput),
          &nResult,
          SQL_MODE_READ_ONLY);

Peter II schrieb:
> nein, aber warum stört dich das?
Problem ist bei der User, dass er nicht weiss ob es in der Datenbanken 
was geändert (aus versehen Z.B) wurde.
> Du könntest mal verscuchen die Datei-Ready-Only zu machen?

Ich versuche den ganzen Zeit, aber Ergebnis ist immer gleich
#2419416
Lesenswert?

Ich könnte mir vorstellen, dass dieser Wechsel des Dateidatums durchaus 
seine Gründe hat.
Während des Zugriffs, selbst wenn er nur lesend ist, muss die Datenbank 
Schicht die betreffenden Records locken, damit nicht während des 
Lesezugriffs ein anderer Schreibzugriff dazwischenkommt. Bei einer 
filebasierten Lösung (also nicht mit einem dezidiertem Server) geht das 
aber nur, wenn in der Datei selber der Lockschutz gemacht wird (also in 
einem Byte in der Datei vermerkt wird, dass der Record momentan gelockt 
ist). E Voila, schon hast du einen Schreibzugriff, obwohl du nur aus der 
DB liest.

Immer drann denken: Eine DB hat auch das Problem, dass mehere Clients 
gleichzeitig auf die Daten zugreifen können wollen und dass das die DB 
nicht durcheinander bringen oder inkonsistente Ergebnisse liefern darf. 
Alles was diese Clients gemeinsam haben ist, dass sie alle auf das 
gleiche File zugreifen. Also kann jegliche dazu notwendige 
Synchronisierung nur über diese Datei abgewickelt werden.
Persönliche Seite #2419442
Lesenswert?

Karl Heinz Buchegger schrieb:
> Während des Zugriffs, selbst wenn er nur lesend ist, muss die Datenbank
> Schicht die betreffenden Records locken, damit nicht während des
> Lesezugriffs ein anderer Schreibzugriff dazwischenkommt.

Wenn die komplette Datenbank im Nur-Lese-Betrieb "angefasst" wird, dann 
sollte dieses Record-Locking entfallen, weil nicht erforderlich.

Und wie ich bereits schrieb, ist das eine Konfigurationsoption des 
verwendeten ODBC-Treibers.
Angehängte Dateien:
Gast #2423376
Lesenswert?

Hallo alle zusammen,


Um eine Dateien Schreibgeschützt zu gestalten ist wie folgenden 
umzugehen:
.....
.....
CFileStatus fStatus;
const int flagReadOnly = 0x01;
printf("'Dateien ist Schreibgeschützt'...\n");
CFile::GetStatus(inputFileName, fStatus);
fStatus.m_attribute = fStatus.m_attribute | flagReadOnly;
CFile::SetStatus(inputFileName, fStatus);
........


euch noch einen schönen Tag
Gast #2423438
Lesenswert?

ja das stimmt aber geht es darum über die DB zugegeriffen (nur lesen) 
und am Ende wird die DB schreibgeschutzt erstellt, damit der User weiss 
es wurde nichts geändert. Wie gesagt es ist eine Luxus Prob muss man 
nicht tun...
Persönliche Seite #2423450
Lesenswert?

Sicher, das ist ein Luxusproblem, bloß helfen dabei Hinweise auf 
CreateFile einfach überhaupt nicht, da --wie ich nicht das erste Mal 
hier schrieb-- eine ODBC-Verbindung genutzt wird, und man beim 
Einrichten dieser spezifischen ODBC-Verbindung konfigurieren kann, ob 
nur Lesend auf die Datenbank zugegriffen werden soll.

Und wenn der Access-ODBC-Treiber auch dann der Ansicht sein sollte, das 
Dateidatum ändern zu müssen, müsste man sich dessen Quelltext besorgen 
und das Verhalten dort ändern. Wenn der Quelltext nicht besorgbar ist 
--was bei einem MS-Produkt mehr als wahrscheinlich ist--, müsste man 
einen eigenen Access-ODBC-Treiber entwickeln, was bei dem Luxusproblem 
hier wirklich völlig illusorisch ist.
Gast #2432128
Lesenswert?

simo schrieb:

> Problem ist bei der User, dass er nicht weiss ob es in der Datenbanken
> was geändert (aus versehen Z.B) wurde.

Du mutest dem Nutzer also lieber zu, sich zu merken, welche Datei seine 
Daten enthält und welches Datum diese Datei nach der letzten gewollten 
Änderung hatte, statt dass Du die Datenbank einfach erweiterst und dort 
die Änderungsdaten vermerkst? Das könntest Du dem Nutzer dann plakativ 
präsentieren.

42m

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren