Danke für eure Mühe .
Habs gefunden
q2.exec("SELECT @@IDENTITY as 'id'");
q2.first();
QVariant index = q2.value(0);
q2.finish();
So funktionierts ^^.
Das mit dem Rollback funktioniert noch nicht.
elise schrieb:
geeky schrieb:
mysql-server schrieb:
[..]ich wolte mal von paar monaten den mysql-server 2008 installieren (hab 2005), da ich kein profi bin und einen 2005 server habe[..]
2005/2008? Das riecht irgendwie eher nach MS-SQL statt MySQL ?
wir sind detektive (/me wollte sowieso schon immer mal ihren beruf wechseln: detektivin)
oh, sorry .
tatsächlich, das ist "MS-SQL". hab bei der programmierung nicht drauf geachtet hab nur SQL gesehen und dachte dass das "MySql" ist (kenne es von php).
und ja ich programmiere unter windows mit c++/cli wobei ich auch etwas c++ kann. da bei c++/cli man ja schon ein "window" (WindowsForms) leicht erzeugen kann hab ich mal ein paar programme erstellt.
ich hab mal ein programm geschrieben das wörter speichert, z.b. vokabeln. das "speicher" hab icb mal in einer .xml datei gemacht. jetz wollte ich mal das ganze aber versteckt machen, damit man die wörter-datei nicht so einfach aufmachen und bearbeiten kann (und auch mal mit datenbanken arbeiten, mit php klappt das ja sehr gut).
wenn ich z.b. das programm frei anbieten und das programm mit einer datenbank arbeitet, sollte die "datenbank installation" für den benutzer nicht (so) schwer sein.
vor kurzem hab ich mir mal ein paar programme angeschaut (auf meinem pc), und keins davon nutzt eine datenbank (glaube ich). alle daten werden einfach in einer datei gespeichert. z.b. das programm "QuickDic" (deutsch/englisch übersetzer), speichert auch alle wörter in einer .win datei (13 Mb).
ist das überhaupt ratsam "mein" programm mit einr datenbank zu verwenden? oder anders gesagt, ist es ratsam nur für ein programm ein datenbank zu erstellen? da ich mehr sachen mit php...mysql...(für web) gemacht habe weiß ich das eine datenbank im web zwar keine pflicht aber seeeehr hilfreich ist (alternative, man speicher alles in deiner datei).
und mit c++ hab ich bis jetzt nur ein programm das speichert. deswegen die ganzen fragen
tntnet schrieb:
asc schrieb:
Die Verwendung einer Datenbank ist immer komplexer als ein einfacher Dateizugriff.
Einspruch. Wenn ich strukturierte Daten wie beispielsweise ein Adressbuch habe, kann es eine kleine Herausforderung sein, die Daten strukturiert in einer flachen Datei unterzubringen. Zumindest wenn man den Anspruch hat, es richtig zu machen.
Ich habe absichtlich "einfacher Dateizugriff" geschrieben. Und da unser werter confused_men noch keinerlei Datenbankabstraktionsschicht geschrieben hat, oder noch nicht mal sicher ist welche Schnittstelle er verwendet, muss ich davon ausgehen das es derzeit mehr Aufwand für ihn ist. Und ohne eine Abstraktionsschicht kann eine csv-Datei tatsächlich merklich einfacher sein.
maikmueller schrieb:
Hallo,
ich habe eine Abfrage mit nachfolgendem Code welche leider falsche Ergebnisse liefert. Das Problem ist, dass auch Datensätze welche vom TYP 'Wettterminal' sind im Ergebnis auftauchen. Meiner Meinung nach ist die Syntax korrekt, falls jemand ein Fehler sieht unbedingt melden.
Hier mein Code:
select * from geraeteverwaltung where nr_kd = '10000' or nr_kd_abrechnung = '10000' and typ = 'geldspieler' or 'unterhaltungsautomat' order by snnr
Liebe Grüsse
Maik
And hat eine höhere Priorität, daher wird die Bedingung so interpretiert:
nr_kd = '10000' or (nr_kd_abrechnung = '10000' and typ = 'geldspieler') or 'unterhaltungsautomat'
Offensichtlich ist mysql darüber hinaus noch so tolerant, dass es die Abfrage 'unterhaltungsautomat' in einen Wahrheitwert übersetzt und es als wahr ansieht. Du bekommst damit dann immer alle Datensätze, da das 3. or-Prädikat immer wahr ist.
Danke erstmal für die Antwort, werde mir WebDAV mal näher anschauen und gucken in wie weit ich damit was anstellen kann. Inwieweit sich die Software scripten lässt kann ich ja nochmla nachhaken wenn ich die nächste gelegeneheit dazu habe.
So weit ich informiert bin gilt das jedoch nur zur Gestaltung des Softwareoutputs. Die Software ist halt für eine Menge Arten von Maschienen und Anwendungszwecken entwickelt worden.
@Twutz
Das was du machst mag zwar das gleiche Ergebnis leben doch ist das nicht mit einem Inner Join zu vergleichen.
Zuerst wird from ausgeführt, dann where. Und bei einem impliziten Crossjoin werden halt unverhältnismäßig viel mehr Datensätze heranzgezogen die du dann nachträglich mit dem where erschlägst.
In diesem Zusammenhang verursacht das Crossjoin (wie du es verwendest) mehr arbeite als das Inner join
Moin
ich hab nen problem mit einem nicht initiallisierten recordset:
folgendes Problem:
ich möchte ne ausfallsicherung für meine DB schreiben...
heist wenn die datenbank ausfällt soll das mitgeloggt werden...
nun hab ich mein programm so aufgebaut das ich immer nur noch sql-befehlen in nen string packe und diesen string (aktion) dann an die entsprechende funktion übergebe die dann nen insert update oder delete macht ... beim select soll das gelesene recordset zurück gegeben werden das ich dann wiederrum auswerte ...
wenn datenbank da ist funktioniert das auch alles...
nun will ich aber ne ausfallsicherung schreiben:
wenn die db aus irgend nem grund ausfällt soll die aktion gelogt werden und es soll ein leeres recordset zurück gegeben werden ...
das mit dem loggen geht ... aber ich bekomm das leere recordset net hin ...
_RecordsetPtr pRecordset; <-- das muss irgendwie anders initiallisiert werden so das while (!pRecordset->GetadoEOF()){ <-- funktioniert und das programm nicht abstürzt ...
wie bekomm ich das hin ???
mfg LT
_RecordsetPtr DB::DBSelectNow(CString aktion){
CACS400App* pApp = (CACS400App*)AfxGetApp();
pApp->wnd->m_bk_dbv_status_rgb2 = RGB(0,255,0);
pApp->wnd->SetDlgItemText ( IDC_DBV_STATUS2, LSTRING263 ) ;
_RecordsetPtr pRecordset;
if(DBConTRUE==TRUE){
try {
_CommandPtr pCommand;
HRESULT hr = pCommand.CreateInstance (__uuidof (Command));
if (FAILED (hr)){
AfxMessageBox ("Can't create an instance of Command");
}
pCommand->ActiveConnection = m_pConn;
pCommand->CommandText = (_bstr_t) aktion;
hr = pRecordset.CreateInstance (__uuidof (Recordset));
if (FAILED (hr)){
AfxMessageBox ("Can't create an instance of Recordset");
}
pRecordset->CursorLocation = adUseClient;
pRecordset->Open ((IDispatch *) pCommand, vtMissing, adOpenForwardOnly,
adLockReadOnly, adCmdUnknown);
}
catch( _com_error &e ) {
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE( "Exception thrown for classes generated by #import" );
TRACE( "\tCode = %08lx\n", e.Error());
TRACE( "\tCode meaning = %s\n", e.ErrorMessage());
TRACE( "\tSource = %s\n", (LPCTSTR) bstrSource);
TRACE( "\tDescription = %s\n", (LPCTSTR) bstrDescription);
CString ausg;
ausg.Format("Select: %s",(LPCTSTR) bstrDescription);
AfxMessageBox (ausg);
}catch (...){
TRACE ( "*** Unhandled Exception ***" );
}
pApp->wnd->m_bk_dbv_status_rgb2 = RGB(255,0,0);
pApp->wnd->SetDlgItemText ( IDC_DBV_STATUS2, LSTRING264 ) ;
}else{
DBAusfallSicherung(aktion);
}
return pRecordset;
}
witte schrieb:
...das sollte dann aber nicht solange dauern. Wenn es wirklich am DB-server liegt könntest mit dem SQL Server Profiler mal schauen wo er hängt bzw dein Aufruf da sofort registriert wird.
Ja das ist mir klar. Allerdings war das nicht die Fragestellung. Ich wollte nur wissen ob es unter C++ die Möglichkeit gibt, eine Abfrage nach Existenz und Lauffähigkeit des Servers bzw. der Datenbankinstanz und Tabelle durchzuführen.
Habs gelöst,
man bekommt mittels count(NULLIF(wert, 0))
die Anzahl der Datensätze heraus, die wert <> 0 haben.
d.h. alle wert=0 werden zu NULL, die dann wiederum nicht gezählt werden
edit: wert > 0 ist natürlich was anderes wie wert <> 0 , aber für meine Zwecke reicht es.
in meinem fall war es relevant dass ich nur weiß ob es einen bestimmten eintrag gibt..
das habe ich nun mit mysql_num_rows gelöst... s.u.
mich würde trotzdem interessieren wie kann ich denn diesen wert in eine variable speichern?
MYSQL_RES *result;
result = mysql_store_result(conn);
std::cout << "affected rows: " << mysql_num_rows(result) << "\n\n";
mysql_free_result(result);
hustbaer schrieb:
... Und dass sie wieder die typische Abzocker-Schiene fahren, und gewisse Features die nahezu jeder gut brauchen könnte auf die Enterprise-Version beschränken (wie z.B. Page-Compression und Backup-Compression).
Das werden sie sich von Oracle abgeschaut haben. Ich sag nur Function based indicies.
OT: Also ich verstehe die Intention noch immer nicht. Wenn ich mehrere Berechnungen auf der DB ausführen muß deren erster Teil immer das gleiche und außerdem teuer ist, könnte ich die Zwischenergebnisse in einer solchen Tabelle speichern um sie dann weiter verwenden zu können. Dann weiß ich aber das die Tabelle existiert.
Es könnten weiterhin komplizierte Filterdaten zu den Abfragen benötigt werden, die man nicht jedes mal übertragen will: WHERE id in (1,2,3,4,...,n). Auch hier könnte eine solche Tabelle nützlich sein. Dann weiß ich aber doch aber auch dass ich sie angelegt habe. Der Benutzer bekommt viele Daten zum Filtern gelistet und klickt die an die er benötigt (z.B. mit einem Assistenten oder sein Profil). Ich entscheide dass ich diese Daten zuerst in einer temporären Tabelle speichern werden, weil es vllt mehr als 100 Items sind. Dieselbe Information die ich zu dieser Entscheidung benötige kann man doch auch verwenden um zu wissen dass die Tabelle existiert??? Oder nicht?
du kannst die spalte ja länger machen als die aktuelle einstellung. sagen wir immer 1000 zeichen lang oder so. dann hast du trotzdem ne spalte die a) kürzer als das gesamte dokument ist und b) keine HTML tags mehr beinhaltet, so dass du sie einfach mit LEFT() zusammenkürzen kannst.
Ich habe es auf 2 verschiedenen Rechnern ausprobiert, bei beiden hatte ich den selben Effekt. Mit "steigendem Speicherbedarf" meine ich den Arbeitsspeicher, dazu schaue ich in den Task-Manager, habe es auch mit einem anderen Freeware-Programm probiert. Dieser steigt stetig mit jedem Verbindungsaufbau.
Also generell gehe ich auch mal davon aus, dass es nicht am Treiber liegt, aber würde es dennoch mal mit einem Update probieren. Ich war auf der Seite:
http://www.oracle.com/technology/software/tech/windows/odbc/index.html
Welches müsste ich für "Oracle in OraClient10g_home1" da runterladen? Sehe das nicht wirklich raus.
Hallo,
würde gerne auf einer Sybaseinstallation für einen User ein Art SQL Log führen, so das ich nacher nachvollziehen kann wann welche statements auf die DB abgesetzt wurden.
Geht das? und wenn ja wie? Habe bisher nichts wirklich hilfreiches dazu finden können.