Forum: PC-Programmierung Visual mit SQL


von simo (Gast)


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

von Peter II (Gast)


Lesenswert?

Welche Datenbank, welches Datum ändert sicht?

von simo (Gast)


Lesenswert?

Das Datum der gelesen Datenbanken, obwohl es nur gelesen hat.

von simo (Gast)


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!!!!!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

Wie wäre es mit ausprobieren?

von simo (Gast)


Lesenswert?

ja ausprobiert und nichts gebracht!!!!

von Udo S. (urschmitt)


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++, ...

von simo (Gast)


Lesenswert?

Ich programmierde Datenbanken: über das unsägliche Access :-)
und über ODBC

Die Programmiersprache ist C++ (Visual Studio 2010)

Danke

von simo (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das dürfte ein grundlegendes Problem von Access sein. Möglicherweise 
kannst Du im ODBC-Setup der Acess-Datenquelle ein "read-only"-Flag 
setzen, also nicht in Deinem Programm, sondern da, wo Du die DSN für 
Deine Access-Datei einrichtest.

von Peter II (Gast)


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?

von simo (Gast)


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

von Karl H. (kbuchegg)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Angehängte Dateien:

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.

von simo (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

simo schrieb:
> Um eine Dateien Schreibgeschützt zu gestalten ist wie folgenden
> umzugehen:

Das ist schön, hier aber nicht hilfreich, da nicht mit Dateioperationen 
auf die Datenbankdatei zugegriffen wird, sondern über eine 
ODBC-Verbindung.

von simo (Gast)


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...

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Peter II (Gast)


Lesenswert?

man könnte die ACCESS Datei auf auf ein ReadyOny Share oder Datenträger 
legen, dann kann der Treiber das Datum nicht veränder. Die Frage ist ob 
es dann überhaupt noch geht.

von Michael K. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.