Hab so was ähnliches mal mit c# gemacht, sollte für dich also kein Problem sein das ganzu in cpp zu implementieren.
private void BtnSend_Click(object sender, EventArgs e)
{
// used to build entire input
StringBuilder sb = new StringBuilder();
// used on each read operation
byte[] buf = new byte[9000];
// delate last data gried view
dataGridView1.Columns.Clear();
// build the command string and prepare the web page we will asking for
string strCommandUrl = string.Empty;
strCommandUrl = @"http://www.******.****/mimo/phptest/client_query.php5?table=";
strCommandUrl += strTable.Text;
strCommandUrl += "&query=";
strCommandUrl += strQuery.Text;
strSendingCommand.Text = strCommandUrl;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strCommandUrl);
// execute the request
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
string tempString = null;
int iCnt = 0;
do
{
// fill the buffer with data
iCnt = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (iCnt != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.ASCII.GetString(buf, 0, iCnt);
// continue building the string
sb.Append(tempString);
}
}
while (iCnt > 0);
string strTmp = sb.ToString();
// bugfix by php DOM/XML creation.
strTmp = strTmp.Replace("<DataBase/>", "<DataBase>");
strTmp= strTmp.Insert(strTmp.Length, "</DataBase>");
strResponse.Text = strTmp;
// Save the correct xml file to the given location
StreamWriter strWriter = new StreamWriter(@"C:\***\WebRqTest\Test\Db.xml");
strWriter.Write(strTmp);
strWriter.Close();
// create a dataset for the dategridview
DataSet dsBook = new DataSet(strTable.Text);
// usw ......
Hoffe das ich Dir damit etwas weiterhelfen konnte.
MfG
mimo
RED-BARON schrieb:
die SQL-Query kann doch falsch sein wie sie will, der Server sollte
den entsprechenden Fehlertext senden, doch dazu kommt es ja nicht
Segmentation fault
Ist irgendwas beim Linken falsch gegangen ? Warnungen beim compilieren ?
jep stimmt, soweit habe ich dann garnicht mehr gelesen.. bin bei der query hängen geblieben.
ja, eigentlich wollte ich mein beispiel ja minimal haben.
aber da muss dann eben noch mehr rein.
da brauche ich noch ein bisschen.
schon mal vielen dank
phlox81 schrieb:
Ist das nicht ganz logisch, wenn du bei GROUP BY auch den Vornamen als Kriterium setzt?
nö, gerade da er auch den Vornamen in der GROUP BY drin hat, müssten zwei zeilen rauskommen, und nicht COUNT(*) = 2.
Naja.
Zurückspielen können wir die Daten. Das haben wir durchaus schon probiert, und funktioniert "super".
Wobei "super" eben heisst: es hat noch nie Probleme gegeben, nur durch die vielen *.trn Files die man einzeln restoren muss, dauert es halt ewig, und nervt wie Sau.
Aber naja. Kann man auch nixe machen.
Im Prinzip ist das ein Webcrawler der nach einem bestimmten Muster auf der Webseite sucht(Stichwort Regex). Du müsstest quasi den HTML Code laden und nach Telefonnummern scannen. Der Export nach Excel sollte nicht das Problem sein!
Ich hatte damit noch nie Probleme. Klar dauert es lange wenn man etwas an Tabellen ändert.
Das ist aber bei jedem RDBMS so. Schon mal das SChema bei MySQL geändert mit einer Tabelle von 50Mill einträgen? Horror.
Da funkt mal die nächsten 15 Minuten nichts.
Hallo
Ich habe ein Programm geschrieben, was aus einer Datei die IDs ausliest (einlesen der Datei mittel Expat) und dann in eine Datenbank speichert.
Ich bekomme immer wenn ich Daten in meine Datenbank eintragen will ein ganze Menge Memory Leaks. Ich habe schon sehr viel im Internet geforscht und bin mir eigetnlich sicher, dass ich das Problem richtig gelöst habe. Leider bekomme ich das nicht hin.
Ich poste jetzt mal nicht den ganzen Code, sondern erstmal meine SQL Anweisung.
void insert_tableH(int id) {
//cout << &id << endl;
char *zSQL = sqlite3_mprintf("INSERT INTO Highways (id) VALUES ('%i')",id);
int err = sqlite3_exec(Database, zSQL, NULL, NULL, &error);
sqlite3_free(zSQL);
if( err!=SQLITE_OK ) {
cout << "Fehler beim eintragen der daten\n";
cout << error <<endl;
sqlite3_free(error);
exit(1);
}
}
Also ich bin mir sehr sicher, dass der Fehler in dieser Methode zu finden ist. Denn wenn ich den Funktionsaufruf auskommentiere bekomme ich keine Leaks mehr.
2 Dinge wären eventuell noch möglich:
1: Verursacht das einmalige öffnen der Datenbank vllt die Leaks und ich muss nach jedem eintragen von einem Datensatz die DB wieder schliessen und dann erneut öffnen?
2: Reicht es aus wenn ich sqlite3_free() einfach so aufrufe oder muss ich vorher noch irgendwelchen Code implementieren? Brauche ich vorher malloc?
MFG
MilkToast
Also ich sammele die Änderungen immer in einem SQL-Skript und wenn dann eine neue Softwareversion ausgeliefert wird gebe ich dem Skript eine Versionsnummer und liefere sie mit aus (das kann dann über ein Tool eingespielt werden). Danach fange ich ein neues leeres SQL-Skript für die nächste Version an. Wenn dann der Mitarbeiter zu einem Kunden fährt um dort alle Systeme zu aktualiseren baue ich ihm meistens ein Diff-File wo alle ausstehende Updateskripte zusammenkopiert worden sind. Das passiert aber eigentlich selten, da die Kunden meist die aktuelle Software- und damit DB-Version haben wollen, es gibt z.B. keine großen Versionsunterschiede zwischen den einzelnen Kunden. Worauf du lieber aufpassen solltest ist die Möglichkeit
* ein Skript mehrmals einzuspielen ohne das dieses schädlich ist
* der häufigste Fehler ist ist das Auslassen (Vergessen) ein Skript einzuspielen. Diese Fehler lassen sich nur schwer finden. Hier solltest du irgend eine Art Management einführen.
Ich würde es glaube ich auch so machen, wie Unix-Tom es vorgeschlagen hat. Falls Du aber unbedingt schon eine hierarchische Struktur von deiner Datenbank bekommen willst ... es gibt sowas wie ein SHAPE commando. Wie das genau funktioniert weiss ich im Moment nicht mehr. Ich glaube das kommt noch von 'ner Access-Datenbank. Das konnte man aber irgendwie auch für eine SQL-Datenbank nutzen in dem man mit dem Datenprovider rumtrickst. (ich würde es nicht so machen)
http://support.microsoft.com/kb/189657
Okay, hab ich mir fast schon gedacht.
Wenn es lange dauert dann vielleicht weil viele andere SELECTS machen.
Es handelt sich hierbei um eine rein lokal erreichbare Datenbank, es hat also sonst niemand Zugriff darauf und es finden nebenbei keine Anfragen an die DB statt.
Geh auf "Projekt Optionen", dort auf "Zusätzliche Kommandozeilen Optionen" und klicke auf "Bibliothek/ Objekt hinzufügen".
Hier wählst du die "MySQL/lib/opt/libmysql.lib aus.
Nun sollte es gehn.
Bei MySQL kannst DU so eine SQL-Datei dem Clientproramm von MySQL übergeben. Dann musst Du dir selbst nicht schreiben.
Schau dir mal das Programm mysql mit den Parametern an.
Schreib dir ein Script welche dir das automatisiert und gut ist es.
Das mit "b" war ein Flüchtigkeitsfehler, sorry.
Wenn dann hätte es "t1.b = t2.c" heissen müssen (t2.b gibt's ja garnicht).
Wieso du kein Ergebnis bekommst weiss ich auch nicht.
Bist du sicher dass du die richtigen beiden Spalten vergleichst?
Und dass die gaznen "mid()" korrekt sind?