Forum: PC-Programmierung Visual Studio C++ + Qt Plugin "Datenbank Error Connection"


von David (Gast)


Angehängte Dateien:

Lesenswert?

Ich arbeite in eine der projekte mit Datenbanken (Access Datenbank).
In dieses Datenbanken werden nur Messdaten geschrieben.
Bei mir auf meinen PC funktioniert alles einwandfrei.
wenn ich dieses projekte in eine andere PC teste dann bekomme ich  keine 
Verbindung zu Datenbank "Seh bitte Anhang"


Wie gesagt auf meinen PC könnte ich immer testen und sobald ich in einem 
anderen PC ausprobiere bekomme ich die oben genannte Fehlermeldung.

Was für treiber kann es fehlen?
Auf der andere Maschiene  ist auch die Office Paket installiert.
gibt es einen QOBDC driver?

Danke in voraus

von Dr. Sommer (Gast)


Lesenswert?

David schrieb:
> Was für treiber kann es fehlen?
Vermutlich der ODBC Treiber für die Access Datenbank
> Auf der andere Maschiene  ist auch die Office Paket installiert.
Ja, dabei wird der mitinstalliert.
http://www.microsoft.com/de-de/download/details.aspx?id=13255  Mit 
diesem Download kannst du den auch ohne Office installieren. Aber 
Achtung: Die Bittigkeit muss der deiner Anwendung entsprechen, also wenn 
deine Anwendung 32bit ist brauchst du den 32bit Treiber (auch wenn es 
ein 64bit System ist). Das ist btw besonders lustig mit Java, weil man 
da a priori gar nicht weiß ob die JVM 32bit oder 64bit ist...

von David (Gast)


Lesenswert?

aber auf der andere PC ist auch Access darauf installiert.

von David (Gast)


Lesenswert?

Ich habe trotzdem die Treiber installiert aber ich bekomme immmer die 
gleiche Fehlermeldung?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann genügt es vielleicht nicht, nur den "Datenbanktreiber" zu 
installieren, sondern es muss auch eine ODBC-Verbindung konfiguiert sein 
...

Sieh Dir mal an, was odbcad32.exe auf dem Rechner, wo der Kram 
funktioniert, als System-DSNs oder User-DSNs ausgibt.

Achtung:

Wenn Du auf einem 64-Bit-Windows arbeitest, wird standardmäßig die 
64-Bit-Version von odbcad32.exe aufgerufen; die aber ist nur für 
ODBC-Verbindungen von 64-Bit-Programmen zuständig. Möchtest Du die 
ODBC-Verbindungen für 32-Bit-Programme konfigurieren, musst Du die für 
32-Bit-Verbindungen zuständige Version von odbcad32.exe aufrufen.

Genialerweise heißen beide Ausführungen gleich, und genialerweise sind 
sie auch optisch nicht zu unterscheiden.

Die 64-Bit-Version findet sich unter

c:\windows\system32\odbcad32.exe

Die 32-Bit-Version hingegen findet sich unter

c:\windows\syswow64\odbcad32.exe


Ja. Das ist Windows. So ist das.

von David (Gast)


Angehängte Dateien:

Lesenswert?

Ja die "odbcad32.exe" habe ich gefunden und die lag genau wie du gesagt 
hast

Rufus Τ. Firefly schrieb:
> c:\windows\syswow64\odbcad32.exe

und so sieht bei mir die "ODBC-Datenquelle" seh bitte Anhang:

Es sieht alles okay

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Schön. Und hast Du Dir auch die System- bzw. Datei-DSNs angesehen?

(Einen weiteren Screenshot muss Du davon nicht posten)

: Bearbeitet durch User
von David (Gast)


Lesenswert?

Ja das habe aber ich bin nicht schlauer geworden....

von bluppdidupp (Gast)


Lesenswert?

Wie sieht denn der Code aus wo mit der DB kommuniziert wird, bzw. die 
Verbindung geöffnet wird? Und was wird da konkret für eine Komponente 
für genutzt? (Ich kenne zwar QT nicht, aber vllt. kann man daran ja 
trotzdem was erkennen)

Wenn ich das hier richtig interpretiere:
http://qt-project.org/forums/viewthread/19174
...gibt es da bei QT scheinbar irgendwelche Klassen, die für den 
DB-Zugriff verantwortlich sind und dort selbst auch Treiber genannt 
werden? D.h. das Problem liegt ggf. an der QT-Runtime die nicht 
korrekt/vollständig genug auf dem Zielrechner angekommen ist oder wo 
Teile nicht gefunden werden?

von David (Gast)


Lesenswert?

hier ist meine Klasse, die für die DatenBankverbindung verantwortlich 
ist:

Header File:
1
class DatabaseManager
2
{
3
public:
4
  static DatabaseManager &getInstance();
5
  static QSqlDatabase db;
6
  static bool createConnection();
7
......
8
};

Cpp File:
1
#include "DatabaseManager.h"
2
 
3
QSqlDatabase DatabaseManager::db  = QSqlDatabase::addDatabase("QODBC");
4
DatabaseManager::DatabaseManager(void)
5
{
6
}
7
8
DatabaseManager::~DatabaseManager(void)
9
{
10
  db.close();
11
}
12
DatabaseManager &DatabaseManager::getInstance()
13
{
14
  static DatabaseManager databaseManager;
15
  return databaseManager;
16
}
17
18
bool DatabaseManager::createConnection()
19
{
20
     db.setDatabaseName("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:/Messungen/TestDB.accdb");
21
22
    if (!db.open()){
23
    QMessageBox::critical(0,
24
    QObject::tr("Database Error Connection"), db.lastError().text());
25
  return false;
26
  }
27
28
  return true;
29
}

Ich habe dann eine Installer daraus gemacht wo ich dann auf beliebige PC 
installieren kann.

Bei mir funktioniert einwandfrei und ich kann die DB öffnen.
Die nötige Dll sind auch bei der Installer von daher nach meine 
Einschätzung muss es eigentlich alles okay sein.

Ich komme zu ersten mal mit der Datenbank in Berührung und weiss es 
wirklich nicht wo das Probelem sein kann.

von bluppdidupp (Gast)


Lesenswert?

Man könnte mit z.B. filemon mal schauen was er so alles an *.dlls 
versucht zu laden und ob da ggf. eine fehlen könnte.

von David (Gast)


Lesenswert?

bluppdidupp schrieb:
> Man könnte mit z.B. filemon mal schauen was er so alles an *.dlls
> versucht zu laden und ob da ggf. eine fehlen könnte.

Was meinst du genau?

von David (Gast)


Lesenswert?

Ich benutze aber Access Datenbank bzw. QODBC und ich habe folgende DLL 
file miteingepackt.

QSQL4.dll
QSQLODBC4.dLL
QSQLPSQL4.dll
QSQLLITE4.dll
 und trotzdem bekomme ich immmer die gleiche Fehlermeldung.

Wie gesagt auf mein PC funktioniert aber in eine andere PC leider nit.


Was muss ich noch als DLL miteinpacken?

von Peter II (Gast)


Lesenswert?

David schrieb:
> Ich benutze aber Access Datenbank bzw. QODBC und ich habe folgende DLL
> file miteingepackt.
>
> QSQL4.dll
> QSQLODBC4.dLL
> QSQLPSQL4.dll
> QSQLLITE4.dll
>  und trotzdem bekomme ich immmer die gleiche Fehlermeldung.

nein, für ODBC wird wohl nur die QSQLODBC4.dLL verwendet.

Hast du mal genau den Treibername zwischen den beiden PCs verglichen?

Oder als alternative einfach mal eine DSN anlegen und schauen ob das 
damit geht.

von bluppdidupp (Gast)


Lesenswert?

David schrieb:
> Was meinst du genau?

Bei filemon/process monitor wird angezeigt welche Dateien die Anwendung 
versucht zu laden, damit kann man schonmal seltsame Probleme aufdecken.
z.B. kann es sein, dass er zwar die "QSQLODBC4.dLL" findet, diese aber 
wiederum Abhängigkeiten hat die man aus irgendwelchen Gründen auf dem 
Zielrechner nicht hat. Oder man kann damit auch sehen, ob er *.dlls ggf. 
im falschen Ordner sucht.

von David (Gast)


Lesenswert?

bluppdidupp schrieb:
> David schrieb:
>> Was meinst du genau?
>
> Bei filemon/process monitor wird angezeigt welche Dateien die Anwendung
> versucht zu laden, damit kann man schonmal seltsame Probleme aufdecken.
> z.B. kann es sein, dass er zwar die "QSQLODBC4.dLL" findet, diese aber
> wiederum Abhängigkeiten hat die man aus irgendwelchen Gründen auf dem
> Zielrechner nicht hat. Oder man kann damit auch sehen, ob er *.dlls ggf.
> im falschen Ordner sucht.

Bei diesem programm "Prozess Monitor" muss ich immer die Admin rechte 
haben?

von David (Gast)


Lesenswert?

Hallo,

Nach der Installation des Prozess Monitors habe ich festgestellt, dass 
der Installer auf der Ordner, wo QT installiert ist zugreift.

Mir ist dieses Zugriff unerklärlich?

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.