shareholder schrieb:
c:\Dokumente und Einstellungen\jens\Eigene Dateien\Visual Studio Projects\mysql-test\mysql-test.cpp(28) : fatal error C1010: Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte Headerdatei
Du solltest zuerst mal lernen, deinen Compiler zu benutzen. Wenn du "Use precompiled header file" (/Yu) angibst, dann musst du das angegebene File auch als erstes inkludieren, sonst beschwert sich der Compiler. Bei den meisten neuen Projekten der IDE ist das standardmäßig eingeschaltet.
Es gibt ein (kostenpflichtiges) Crypto Addon vom Original-Autor.
Eine simple Verschlüsselung kannst du auch recht einfach selbst machen. Schau dir mal die Datei os.c an. Du könntest dort die Funktionen zum Lesen und Schreiben aus der Datei einfach so abändern, dass die eine simple Verschlüsselung machen.
Wenn deine DB nicht allzugross ist, kannst du sie auch im Speicher halten. Nimm dazu als Namen einfach ein ":memory:", SQLite schreibt dann gar nichts auf Platte. In deinem Programmcode könntest du dann einfach die SQL-Statements speichern die die DB füllen. Hat aber den Nachteil, das du bei jedem Programmstart erst die DB im Speicher füllen musst.
Hallo,
ich habe eine MySQL-Datenbank und versuche eine MFC-ODBC-Consumer-Klasse anzulegen, die auf diese Datenbank verweist. Leider funktioniert das nur, wenn ich diese Datenbank als Benutzerdatenbank anlege. Ich brauche diese allerdings als Systemdatenbank.
Ich habe versucht auf diese Systemdatenbank mit Dreamweaver zuzugreifen. Das funktioniert, leider aber nicht mit VC++.
Woran kanns liegen??
LG ... Drea
Ähm ich nutze odbc mit standard c++ wie beschrieben.
Konsolenanwendung, keine anderen Bibliotheken. So wie es aussieht haben wir aber gerade den Durchbruch geschafft.
erst ExecDirect mit Statement, danach bind und dann fetch et violà; es geht.
Ich glaub ich sollte dazu mal ein tutorial schreiben, dafür haben wir 2 tage gesucht und probiert
mal die forumshilfe verwenden
http://www.c-plusplus.net/forum/viewtopic.php?t=95586&highlight=vorkompilierte+header
zum bleistift
vorkompilierte header und dann im mfc forum suchen
suche findest du oben rechts.
Das SQL ist so schon richig. Lass dir doch mal die Fehlermeldung von mySQL aus-
geben. Die sind meist recht ausführlich. z.B. so:
if(mysql_real_query(&con, query.c_str(), (unsigned long)query.length()))
{
error = mysql_error(&con);
}
Ach ja. Ich denke mit dem Komma meinst du ein Semikolon. Das brauchts / solltest
du tatsächlich nicht verwenden.
Hallo,
ich habe ein Problem mit Prepared Statement in ADO!
ich bereite ein Command Objekt folgerndermaßen vor:
query = "select * form test where feld1=? and feld2=?"
pCmd.CreateInstance( __uuidof( Command ) );
pCmd->CommandText = query.cStr();
pCmd->PutPrepared(true);
pCmd->PutActiveConnection(_variant_t( (IDispatch*) readCon ) );
Das ganze funktioniert wenn ich ein SQL Statement mit einem Parameter habe!
VARIANT param;
param.vt = VT_I4;
param.intVal = ( unsigned long ) objID;
pRs = pCmd->Execute (NULL, ¶m, adCmdText);
Nur wie übergeb ich jetzt mehrere Parameter?! Habe es u.a. schon mit
pCmd->Parameters->Append(pCmd->CreateParameter(fieldname.cStr(),adChar,adParamInput, 1, " "));
versucht nur bekomm ich dann ne Fehlermeldung das die Variable nicht gefunden wurde!
Hat da jemand vielleicht ne Idee?! Hab im Internet nicht viel über Prepared Statements mittels ADO für c++ gefunden!
Im Vorraus schon vielen Dank!
Grüße
Kevin
@fg, wenn du mit MySQL programmieren willst brauchst du mehr als nur die Header-Datei. Wie SeppSchrot schon sagte: Schau mal auf www.mysql.com vorbei und lade dir das jeweilige SDK herunter.
Wow!
Prompte bedienung
ich weiss, warum ich dieses FOrum so toll finde
Vielen Dank schonmal für die Info.
Eine Eigene Klasse schreiben wäre auch eine Möglichkeit..
Allerdings bin ich noch nich so wirklich der erfahrene/gute Programmierer
Daher würde meine Klasse wohl entweder ziemlich unperformant werden oder einfach nie richtig laufen..
WObei okay also einlesen von Dateien habe ich schon gemacht... (mit std::ifstream bzw std::istringstream)
Aber wüsste ich jetzt zum Beispiel auch nicht, wie ich das ganze dann Sinnvoll mit ner SUche nach ID's und so aufziehe...
Hab halt noch nich so die Erfahrung..
Aber einen MySQL Wrapper zu benutzen(Okay mit der APi selbst würde ich wohl auch zurecht kommen) is halt nich so schwer
Und um ehrlich zu sein: Mir is das mit dem Kostenpflichtig erstmal egal. Is in erster Linie eh zu privten Zwecken bzw auf keinen kommerzielen Zwecken gedacht...
Aber eine Frage noch.
Die Datendateien, die kann der embedded Server dann aber auch selbst anlegen, oder muss ich dafür irgendwoher "rohdaten" nehmen?
MfG
da_m0dd0r
Artchi schrieb:
psql und mysql nehmen sich nicht viel? Ich finde das ist extrem falsch. Schon allein das psql Storedprocedures erlaubt, die mysql noch nicht vorweisen kann, spricht für psql.
Nur wenn es die Anforderungen verlangen, was oft nicht der Fall ist. Und MySQL 5 kann das auch :p
Ohne die genaue Anwendung zu kennen kann man nicht sagen was besser ist.
BlackDragon schrieb:
Bei MySQL kann ich die Datenbank kostenlos nutzten sobald ich meine Code zur Verfügung stellen.
Ich denke, damit ist aber nicht dein DDL-Code gemeint sondern der MySQL Programmcode.
Den wird man in der Regel eh nicht ändern. Somit kannst du MySQL immer kostenlos nutzen.
Und die Kosten für MySQL fallen glaub ich auch nur dann an, wenn du MySQL als Teil deiner Software verkaufst.
Hallo,
Mit der ODBC bin ich nicht ganz zurecht gekommen da ich alles mit ADO mache und es anders aufgebaut habe.
Habe jetz aber weiter gesuch und folgenden source gefunden:
#include "stdafx.h"
// BeginProcedureParametersCpp
// ADO COM Komponente einbinden (-> steckt in der DLL msado15.dll)
#import "C:\Programme\Gemeinsame Dateien\System\ado\msado15.dll" rename("EOF","ADOEOF")
// #import "msado15.dll"
#import "C:\Programme\Gemeinsame Dateien\System\ado\msadox.dll" no_namespace
// #include "iostream.h"
#include "stdio.h"
#include "conio.h"
using namespace std;
//Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void ProcedureParametersX(void);
//////////////////////////////////////////////////////////
// //
// Main Function //
// //
//////////////////////////////////////////////////////////
void main()
{
if(FAILED(::CoInitialize(NULL)))
return;
ProcedureParametersX();
::CoUninitialize();
}
//////////////////////////////////////////////////////////
// //
// ProcedureParametersX Function //
// //
//////////////////////////////////////////////////////////
void ProcedureParametersX()
{
HRESULT hr = S_OK;
// Define ADOX object pointers.
// Initialize pointers on define.
// These are in the ADOX:: namespace.
_CatalogPtr m_pCatalog = NULL;
//Define ADODB object pointers.
ADODB::_ConnectionPtr m_pCnn = NULL;
ADODB::_CommandPtr m_pCommand = NULL;
ADODB::_ParameterPtr m_pParameter = NULL;
try
{
TESTHR(hr = m_pCnn.CreateInstance(__uuidof(ADODB::Connection)));
//Open the Connection
m_pCnn->Open("Provider='Microsoft.JET.OLEDB.4.0';"
"Data Source='c:\\Nordwind.mdb';","","",NULL);
TESTHR(hr = m_pCatalog.CreateInstance(__uuidof(Catalog)));
//Open the catalog
m_pCatalog->PutActiveConnection(_variant_t((IDispatch *)m_pCnn));
//Get the command object
m_pCommand = m_pCatalog->Procedures->GetItem("Benutzer")->GetCommand();
_variant_t vIndex;
//Retrieve Parameter information
m_pCommand->Parameters->Refresh();
for (long lIndex = 0; lIndex < m_pCommand->Parameters->Count;
lIndex ++)
{
vIndex = lIndex;
m_pParameter = m_pCommand->Parameters->GetItem(vIndex);
cout << m_pParameter->Name << ":" << m_pParameter->Type <<
"\n" << endl;
}
}
catch(_com_error &e)
{
// Notify the user of errors if any.
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\n\tSource : %s \n\tdescription : %s \n ",
(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
}
catch(...)
{
cout << "Error occured in ProcedureParametersX...."<< endl;
}
}
// EndProcedureParametersCpp
Er Kompeliert es und macht die verbindung zur Datenbank.
Aber bei:
m_pCommand = m_pCatalog->Procedures->GetItem("Benutzer")->GetCommand();
bricht er ab und sagt das er das Objekt nicht finden kann.
Die Tabelle existiert aber.
Hat dazu jemand eine idee ??
Gruß und Danke
andy_mann
Dann musst du das DB-Design so wählen das du nicht von den Primärschlüsseln abhängig bist.
Es gibt dafür keine Lösung wie: Alles Firmen machen das so und so.
Ist eine Firma vernetzt dann ist es einfach. Da gibt es Zentrale Server.
Heutezutage übers INET ja auch kein Problem.
Kommt aber auch auf die Menger der Daten an die Abgefragt werden.
MySQL hat z.B. Replikation. Hier geht man von einem INSERT und vielen SELECT-Servern aus.
Die SELECT-Server stehen am jeweiligen Standort wo dann auch schnell abgefragt werden kann. Der INSERT-Server ist Zentral wo alle schreibvorgänge stattfinden.
Bei einer Änderung am INSERT-SERVER holen sich alle SELECT-SERVER sofort die Daten vom INSERT-SERVER.
Manche Firmen schreiben sich aber auch Serverprozesse welche die Datenbankverbindungen verwalten. Dadurch kann man Zentral festlegen welcher Rechner von welchem Server abfrägt.
Und wie funtkioniert das mit der dll. Ich nehme quasi in einer Entwicklungsumgebung, ein Projekt dll. Dann compiliere ich meinen Quellcode und bekomme eine dll raus. Muss ich die in irgend einem besonderen Verzeichnis haben?
Danke schon mal für die Tips