Hallo Forum,
was ist an dieser Triggerdefinition falsch? Ich benutze db2.
CREATE TRIGGER MengeMalPreisKonst
NO CASCADE BEFORE UPDATE ON Pflanze
REFERENCING NEW AS N OLD AS O
FOR EACH ROW MODE DB2SQL
WHEN (N.Bestand <> O.Bestand)
BEGIN ATOMIC
UPDATE Pflanze SET N.Preis = O.Preis * O.Bestand / N.Bestand
END;
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token "END" was found following "Bestand / N.Bestand
". Expected tokens may include: "<delim_semicolon>". LINE NUMBER=7.
SQLSTATE=42601
Wenn ich nach dem Updatestatement ein Semikolon setze meckert er das er ein "End" gefunden hätte. Habt Ihr eine Idee?
Viele Grüße
Peter
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
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