tfa schrieb:
Im Idealfall hat nur die Anwendung (als Application-Server einer 3-Schicht-Architektur) Zugriff auf die Datenbank und nicht jemand anders.
Es geht um eine Anwendung im recht kleinen Maßstab, für die ein Application Server nicht angebracht ist (Das Programm wird vorwiegend auf Einzelplatz oder kleinen Benutzergruppen von derzeit maximal 10 Benutzern [üblich eher 2-4] verwendet).
Nachtrag:
Es wäre jedenfalls für viele Kunden nicht verständlich wenn wir dort noch weitere Anforderungen Stellen. Das Programm wird zudem vorwiegend eher von Computerunerfahrenden verwendet, so das es derzeit aus genau zwei Dateien (einer exe und derzeit noch Accessdatenbank) besteht, und möglichst geringe Anforderungen an die Computerkenntnisse der Einzelnen legt.
tfa schrieb:
Wie lang ist denn der "Zeitaum x", zu dem bestimmte Datensätze gesperrt sein müssen? Ein paar Minuten während sie bearbeitet werden oder ein paar Tage?
Im Extremfall wenige Minuten (eher noch etwas drunter), und das auch nur bei unseren Kunden mit der größten Accessdatenbank (unter SQL-Server dürfte sich die Zeitspanne nochmal weiter zusammenstreichen)
tfa schrieb:
Echte DB-Locks sollten idealerweise nur ein paar Millisekunden oder Sekunden dauern, sofern sie nötig sind.
Wir hoffen auch das SQL Server schneller als Access ist ;)... Aber er ist noch nicht im Einsatz (bzw. ich bin derzeit daran die Anwendung für verschiedene Datenbanken fit zu machen [hier fehlte vorher eine sinnvolle Trennung] und kann erste Versuche wohl Anfang/Mitte nächster Woche durchführen).
cu André
Ich möchte zu einem SQL-Server eine Verbindung aufbauen und möchte den Fehler abfangen, falls kein Server verfügbar ist, bzw. es Netzwerkprobleme gibt.
Ich nutze CDatabase und übergebe dem Open-Befehl alle Parameter, ich habe keine DSN angegeben. Wenn der SQL-Server nicht verfügbar ist, möchte ich nach einem Timeout den Open() abbrechen. Dummerweise ist irgendwo eine internes Timeout nach ca. 30 Sekunden, wobei dann aber der Anmeldedialog zum SQL-Server automatisch erscheint.
Kann mann diese Anmeldedialog abschalten, da mein Programm im Hintergrund läuft und keine Benutzereingaben möglich sind.
Holger
Hi,
ich möchte in einer Datenbank einen String speichern, der nur 0 und 1 enthält. Der String hat ca. eine Länge von 150.000 Zeichen.
Zur Zeit verwende ich einen LongText, weiß aber nicht ob dieser Ideal ist.
Ist da ein Blob oder Binary ggf. besser?
Cinderella
Du kannst es Dir in der englischen Wikipedia mal durchspielen:
http://en.wikipedia.org/wiki/Relational_algebra
Relation R = (Programmierer | Programmiersprache | Projekt )
Relation S = (Programmiersprache )
Projektion π: Alle Attribute die in R, aber nicht in S auftauchen {Programmierer | Projekt}
1. T := Πa1,...,an(R) × S
=>
Hansi C++ Projekt 1
Hansi Java Projekt 1
Hansi Pascal Projekt 1
Hansi C++ Projekt 2
Hansi Java Projekt 2
Hansi Pascal Projekt 2
Hansi C++ Projekt 1
Hansi Java Projekt 1
Hansi Pascal Projekt 1
Hansi C++ Projekt 1
Hansi Java Projekt 1
Hansi Pascal Projekt 1
2. U := T - R
=>
Hansi Java Projekt 2
Hansi Pascal Projekt 2
3. V := Πa1,...,an(U)
=>
Hansi Projekt 2
4. W := Πa1,...,an(R) - V
=>
Hansi Projekt 1
Edit: Die Projektion erzeugt lt. Artikel ein Set, das Duplikate mit entfernt. Deshalb hier nur ein Tupel in der Ergebnisrelation.
Hättest Du aber auch selber rauskriegen können!
mhh.... nun kommen fehler...
.drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
variable '_iob' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.
Hallo,
ich habe Visual Studio 2008 und wollte in einem Win32 Projekt gerne SOCI nutzen.
Leider werde ich aus der Hilfe nicht ganz schlau:
Da steht:
According to your environment, customize paths and list of libraries by editing the following macros (double-click on macro update Value box):
* FIREBIRD_INCLUDE_DIR - path to FireBird client library headers
* FIREBIRD_LIB_DIR - path to FireBird client library
* FIREBIRD_LIB - FireBird library, can be left unchanged
* MYSQL_INCLUDE_DIR - NOT USED
* MYSQL_LIB_DIR - NOT USED
* MYSQL_LIB - NOT USED
* ODBC_INCLUDE_DIR - ODBC include path, can be left unchanged
* ODBC_LIB_DIR - ODBC libraries path, can be left unchanged
* ODBC_LIB - ODBC library file, can be left unchanged
* ORACLE_INCLUDE_DIR - path to OCI headers
* ORACLE_LIB_DIR - path to OCI libraries
* ORACLE_LIB - list of OCI libraries
* POSTGRESQL_INCLUDE_DIR - path to libpq headers
* POSTGRESQL_LIB_DIR - path to libpq library
* POSTGRESQL_LIB - libpq library, can be left unchanged
* SQLITE3_INCLUDE_DIR - path to SQLite 3 headers
* SQLITE3_LIB_DIR - path to SQLite 3 library
* SQLITE3_LIB - SQLite 3 library, can be left unchanged
Wo finde ich die librarys der verschiedenen DB. Die sind zumindest nicht im zip file zu finden. Wenn ich nur ODBC nutzen möchte, muss ich die Pfade der anderen überhaupt einstellen und mit compilieren?
Hat jemand schon Erfahrungen mit SOCI unter Visual Studio 2008
Edit:
habe 2005 installiert: Nun habe ich das Problem das er im Ordner Backends\SRC den Ordner ODBC erwartet mit den entsprechenden Dateien. dieser ist jedoch nicht da. In der 2.2 version ist er noch da. Ist die 3.0 Version evtl nicht komplett?
Entilzah
was für ne datenbank?? Normal kann man die Tabellen und ihre struktur auslesen aus der datenbank, darin steht dann diese information... Über nen recordset ist das glaub nich möglich.
@Unix-Tom
erstmal Danke
zu 1) Also kann man in beiden eine Reguläre System DLL schreiben. Wenn ich das richtig verstanden habe: Kann man in MFC auch die MFC Klassen nutzen jedoch müssen die Funktionen die exportiert werden in C sein. Oder?
zu 2) Habe mich bissel ungenau ausgedrückt. MFC habe ich bereits gefunden, jedoch habe ich nichts für ein Win32 Projekt gefunden.
Gibt es vielleicht ein gutes Buch, welches sich mit System DLLs beschäftig?
Entilzah
dachte, du hast aus anonymitätsgründen die selectierten spaltenname einfach gelöscht.. stimmt. am besten einfach die sql mal ausgeben, dann fällt viel auf.
tntnet schrieb:
Ich möchte auch bezweifeln, daß ein nummerisches feld wesentlich schneller ist, als ein char-Feld. Gerade bei der Länderdatenbank könnte man beispielsweise die internationalen Länderkennungen "D", "F", "GB" usw. verwenden. Ein char(3)-Feld ist wahrscheinlich nicht wesentlich langsamer, dafür aber einfacher in der Handhabung, da die Schlüssel sprechender sind.
Falls es hier um ORM geht: Vorsicht vor sprechenden Schlüsseln! Businessdaten gehören nicht in DB-Schlüssel. In diesem speziellen Fall wäre es vielleicht eher unproblematisch, aber mit künstlichen IDs ist man auf jeden Fall auf der sicheren Seite.
So ganz nebenbei verhindert das auch noch, daß ich 2 mal Deutschland anlege, was bei einem Kunstschlüssel durchaus passieren kann.
Das erreicht man auch mit einem unique Index.
Hallo,
entschuldigt die mangelnden Informationen:
Ich verwende CDatabase für eine ODBC Verbindung zu einer lokalen Access 2007 Datenbank.
ExceuteSQL liefert keinen Wert zurück, sondern löst bei einem Fehler "nur" eine Exception aus.
Wenn ein Befehl funktioniert passiert gar nichts.
Ich möchte einen Eintrag aktualisieren wenn es ihn schon gibt, sonst erstellen.
Um die Zugriffe so gering wie möglich zu halten dachte ich
if ExceuteSQL(UPDATE ....) == FALSE)
ExceuteSQL(INSERT)
aber das scheint nicht zu gehen.
und wenn ich vorher ein select mache um nachzuschauen, kann ich auch gleich in insert probieren und bei einem fehler ein update machen.
Stefan
Der Grund warum Frameworks das nicht unterstützen könnte einfach sein dass das Framework sonst komplizierter würde.
Ist halt einfacher wenn ich jedes "Objekt" (jede Zeile in einer DB) grundsätzlich immer über einen 32 oder 64 Bit Integer identifizieren kann (+Tabellenname natürlich, der aber meist implizit ist). Wenn man das im Framework quasi festlegt vereinfachen sich wohl einige Fälle die sonst etwas aufwändiger wären.
z.B. könnte man eine "Table" Klasse machen die eine Funktion "GetRow(int64_t rowID)" hat. Ob die RowID wirklich 64 Bit ist ist dabei egal, nur *muss* dafür die ID "einspaltig" sein. Theoretisch könnte man sogar Strings als ID erlauben wenn man statt eines int64_t einen Variant übergibt.
----
Ich habe "mittel bis viel" Erfahrung mit Datenbanken, und zu dem Fall "Link-Table" kann ich aus eben dieser Erfahrung sagen: ich wüsste keinen Fall wo ein zusätzlicher Primary-Key sinn machen würde.
Wenn überhaupt, dann macht ein extra Primary-Key nur dann sinn well
a) alle anderen Candidate-Keys zu breit oder aus einem anderen Grund ungeeignet wären und
b) die Tabelle überhaupt von anderen Tabellen aus referenziert wird.
Bei einer klassichen Link-Tabelle ist meist a) schon nicht gegeben (2x 32 Bit ist IMO noch nicht wirklich "zu breit") und b) schon überhaupt nicht.
----
Mein Hauptproblem am ganzen ist eigentlich, dass ich kaum praktische Erfahrung habe mit den Datenbanken.
Dann würde ich dir wirklich empfehlen dir den (gratis) SQL Server 2005 Express und das dazupassende Management Studio runterzuladen und dich damit etwas zu spielen. SQL Server 2005 Express ist auch kein "Kinderspielzeug", das ist im Prinzip der vollständige SQL Server, bloss mit einem Limit auf die max. Datenbank-Grösse und einigen fehlenden Features die du für diverse Experimente nicht brauchen wirst (Clustering, ...).
Also das muss irgendwas ganz kaputtes sein:
Beim Datum 15.10.2008 stehen in den letzten Bytes immer 0x235e, was dezimal 9054 ist und zufällig sind es 9054 Tage ab diesem Datum bis zum 31.12.2033.
Ich habe ein Teil bei dem der Datumsstempel auf den 15.02.1996 gesetzt ist - dann stehen in den letzten Bytes 0x114c, was dezimal 4428 ist. Ab diesem Datum diese Anzahl Tage aufaddiert kommt man auf den 1.1.2008.
Komisch.