Schrift
[thread]1104[/thread]

Transaction in C++ MySQL

Leser: 1


<< >> 5 Einträge, 1 Seite
skontox
 2004-02-29 23:09
#10919 #10919
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Guten Abend!

Ich würde gerne wissen, wie man Transaktionen in C++ für Mysql-Datenbanken codiert.

Hat hier vielleicht jemand ein Beispiel für mich, denn unter google konnte ich leider nix brauchbares finden.

Ich kann zwar einzelne Statement losschicken und das funktioniert auch, aber wenn ich mehrere Statement losschicken möchte und die als Transaction, weiß ich nicht genau wie.

Gruß skontox\n\n

<!--EDIT|skontox|1078089011-->
skontox
 2004-02-29 23:16
#10920 #10920
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Nachtrag hier mal ein Auszug aus einem Beispiel für ein Statement das ich losschicke:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
sstr << "UPDATE T_Stock SET Stock=" << amount << " WHERE Article_ID=" << artid << " and Storehouse_ID=" << sthid << ends;
strvar = sstr.str();

//convert string to char*
req_book = new char[strvar.size() + 1];
strcpy(req_book, strvar.c_str());

// free the stringstream object
sstr.str("");
sstr.clear();

state=mysql_query(mysqlconn, req_book); // send SQL-statement to the MYSQL-Server

...



Nun will ich aber soetwas als Transaktion starten, aber wie soll ich das genau machen, alles einzel, ist dann aber noch die Transaktion gewährleistet?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
####### Book goods receipt #######

$artid = ???; // value for Article_ID
$amount = ???; // value for Amount
$sthid = ???; // value for Storehouse_ID

SET AUTOCOMMIT = 0;
LOCK TABLES T_Stock WRITE, T_Stocklist WRITE, T_Storehouse WRITE;

SELECT @stock:=Stock FROM T_Stock WHERE Storehouse_ID = $sthid and Article_ID = $artid;
SELECT @tstock:=Total_Stock FROM T_Stocklist WHERE Article_ID = $artid;

UPDATE T_Stock SET Stock =@stock+$amount WHERE Storehouse_ID = $sthid and Article_ID = $artid;
UPDATE T_Stocklist SET Total_Stock =@tstock+$amount WHERE Article_ID=$artid;

UNLOCK TABLES;
COMMIT;



Gruß skontox
skontox
 2004-03-01 16:56
#10921 #10921
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Hat hier sonst eventuel jemand ein gutes Tutorial zu MySQL und Transaktionen.
Denn unabhängig von C++ läuft das auch schon nciht so richtig. Wenn ich p&´über phpmyadmin mit

Code: (dl )
1
2
3
BEGIN;
...
COMMIT;

eine Transaktion beginne, dann macht er alles was dazwischen steht, aber leider auch wenn ich "COMMIT" weglasse. Und das ergibt ja kein Sinn.
Er soll das doch erst alles in die Datenbank schreiben, wenn er den Befehl COMMIT bekommt.
Ich arbeite auch mit InnoDB, die Transaktionen ja eigentlcih verarbeiten können.


Biiiiiiitte ich brauch schnell Hilfe!!! ;-).

Gruß skontox
renee
 2004-03-01 17:03
#10922 #10922
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
hast Du autocommit auf 0 gesetzt??

weitere Infos siehe http://www.mysql.de/doc/de/COMMIT.html
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
skontox
 2004-03-01 18:30
#10923 #10923
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Besten Dank erstmal für Deine Antwort!

Das war nicht das Problem.
Ich hab InnoDB verwendet und auch SET AUTOCOMMIT=0; Und dann COMMIT;
Aber ich habe gerade festgestellt, dass ich in meiner Transaktion
Tables gelocked habe und das klappt nicht im Zusammenhang mit Transaktionen.
Habs gerade herausgefunden, stand unter:

http://www.mysql.com/doc/en/LOCK_TABLES.html

Code: (dl )
NOTE: LOCK TABLES is not transaction-safe and will implicitly commit any active transactions before attempting to lock the tables.



Das Problem ist demnach gelöst.;-)
Dass kommt, wenn man das Kleingedruckte nicht liest!

Besten Dank nochmal!

Gruß skontox
<< >> 5 Einträge, 1 Seite



View all threads created 2004-02-29 23:09.