Datenbank.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. #include "Datenbank.h"
  2. #include <iostream>
  3. // Inhalt der ASDatenbank Klasse aus Datenbank.h
  4. // Konstruktor
  5. ASDatenbank::ASDatenbank( InitDatei *zIni )
  6. {
  7. datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(),
  8. zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(),
  9. (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) );
  10. if( !datenbank->istOk() )
  11. {
  12. std::cout << "AS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet.";
  13. exit( 1 );
  14. }
  15. InitializeCriticalSection( &cs );
  16. ref = 1;
  17. Text befehl = "SELECT port, admin_port FROM server WHERE id = ";
  18. befehl += zIni->zWert( "ServerId" )->getText();
  19. lock();
  20. datenbank->befehl( befehl );
  21. Result res = datenbank->getResult();
  22. unlock();
  23. if( res.zeilenAnzahl == 1 )
  24. {
  25. zIni->addWert( "ServerPort", res.values[ 0 ] );
  26. zIni->addWert( "AdminServerPort", res.values[ 1 ] );
  27. }
  28. res.destroy();
  29. }
  30. // Destruktor
  31. ASDatenbank::~ASDatenbank()
  32. {
  33. datenbank->release();
  34. DeleteCriticalSection( &cs );
  35. }
  36. // nicht constant
  37. void ASDatenbank::lock()
  38. {
  39. EnterCriticalSection( &cs );
  40. }
  41. void ASDatenbank::unlock()
  42. {
  43. LeaveCriticalSection( &cs );
  44. }
  45. int ASDatenbank::istAdministrator( const char *name, const char *passwort )
  46. {
  47. Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" );
  48. Text n( name );
  49. n.ersetzen( "'", "''" );
  50. befehl->append( (char*)n );
  51. befehl->append( "' AND passwort = md5( '" );
  52. Text p( passwort );
  53. p.ersetzen( "'", "''" );
  54. befehl->append( (char*)p );
  55. befehl->append( "' )" );
  56. lock();
  57. datenbank->befehl( befehl->getText() );
  58. Result res = datenbank->getResult();
  59. unlock();
  60. befehl->release();
  61. int ret = 0;
  62. if( res.zeilenAnzahl > 0 )
  63. ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  64. res.destroy();
  65. return ret;
  66. }
  67. bool ASDatenbank::adminHatRecht( int id, int recht )
  68. {
  69. Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " );
  70. befehl->append( id );
  71. befehl->append( " AND rechte_id = " );
  72. befehl->append( recht );
  73. lock();
  74. datenbank->befehl( befehl->getText() );
  75. int ret = datenbank->getZeilenAnzahl();
  76. unlock();
  77. befehl->release();
  78. return ret != 0;
  79. }
  80. bool ASDatenbank::proveKlient( int num, int sNum )
  81. {
  82. Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
  83. befehl->append( sNum );
  84. befehl->append( " AND client_id = " );
  85. befehl->append( num );
  86. lock();
  87. datenbank->befehl( befehl->getText() );
  88. Result res = datenbank->getResult();
  89. unlock();
  90. befehl->release();
  91. bool ret = 0;
  92. if( res.zeilenAnzahl == 1 )
  93. ret = 1;
  94. res.destroy();
  95. return ret;
  96. }
  97. Text *ASDatenbank::getKlientKey( int cId )
  98. {
  99. lock();
  100. if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) )
  101. {
  102. unlock();
  103. return 0;
  104. }
  105. Result res = datenbank->getResult();
  106. unlock();
  107. if( !res.zeilenAnzahl )
  108. {
  109. res.destroy();
  110. return 0;
  111. }
  112. Text *ret = new Text( res.values[ 0 ].getText() );
  113. res.destroy();
  114. return ret;
  115. }
  116. void ASDatenbank::unregisterKlient( int num, int sNum )
  117. {
  118. Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " );
  119. befehl->append( num );
  120. befehl->append( " AND server_id = " );
  121. befehl->append( sNum );
  122. lock();
  123. datenbank->befehl( befehl->getText() );
  124. int za = datenbank->getZeilenAnzahl();
  125. unlock();
  126. if( za == 1 )
  127. {
  128. befehl->setText( "UPDATE server SET tasks = tasks - 1 WHERE id = " );
  129. befehl->append( sNum );
  130. lock();
  131. datenbank->befehl( befehl->getText() );
  132. unlock();
  133. }
  134. befehl->release();
  135. }
  136. bool ASDatenbank::setServerStatus( int id, int status )
  137. {
  138. Text *befehl = new Text( "UPDATE server SET server_status_id = " );
  139. *befehl += status;
  140. *befehl += " WHERE id = ";
  141. *befehl += id;
  142. lock();
  143. if( !datenbank->befehl( befehl->getText() ) )
  144. {
  145. unlock();
  146. befehl->release();
  147. return 0;
  148. }
  149. bool ret = datenbank->getZeilenAnzahl() != 0;
  150. unlock();
  151. befehl->release();
  152. return ret;
  153. }
  154. bool ASDatenbank::setMaxClients( int id, int maxC )
  155. {
  156. Text *befehl = new Text( "UPDATE server SET max_tasks = " );
  157. befehl->append( maxC );
  158. befehl->append( " WHERE id = " );
  159. befehl->append( id );
  160. lock();
  161. if( !datenbank->befehl( befehl->getText() ) )
  162. {
  163. unlock();
  164. befehl->release();
  165. return 0;
  166. }
  167. bool ret = datenbank->getZeilenAnzahl() > 0;
  168. unlock();
  169. befehl->release();
  170. return ret;
  171. }
  172. bool ASDatenbank::serverIstNichtPausiert( int id )
  173. {
  174. Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " );
  175. befehl->append( id );
  176. lock();
  177. if( !datenbank->befehl( befehl->getText() ) )
  178. {
  179. unlock();
  180. befehl->release();
  181. return 0;
  182. }
  183. Result res = datenbank->getResult();
  184. unlock();
  185. befehl->release();
  186. if( !res.zeilenAnzahl )
  187. {
  188. res.destroy();
  189. return 0;
  190. }
  191. bool ret = (int)res.values[ 0 ] == 3;
  192. res.destroy();
  193. return ret;
  194. }
  195. bool ASDatenbank::getChatServer( int accountId, Text *ip, int *port )
  196. {
  197. Text *befehl = new Text( "SELECT a.port, a.ip FROM server a, server_client b, account_client c "
  198. "WHERE a.server_typ_name = 'chat' AND c.client_id = b.client_id AND a.id = b.server_id AND c.account_id = " );
  199. befehl->append( accountId );
  200. lock();
  201. if( !datenbank->befehl( befehl->getText() ) )
  202. {
  203. unlock();
  204. befehl->release();
  205. return 0;
  206. }
  207. Result res = datenbank->getResult();
  208. unlock();
  209. befehl->release();
  210. if( !res.zeilenAnzahl )
  211. {
  212. res.destroy();
  213. return 0;
  214. }
  215. *port = TextZuInt( res.values[ 0 ].getText(), 10 );
  216. ip->setText( res.values[ 1 ].getText() );
  217. res.destroy();
  218. return 1;
  219. }
  220. int ASDatenbank::gruppeErstellen( int accountId, int karteId, int *gruppe_id )
  221. {
  222. Text *befehl = new Text( "SELECT gruppe_erstellen( " );
  223. befehl->append( accountId );
  224. befehl->append( ", " );
  225. befehl->append( karteId );
  226. befehl->append( " )" );
  227. lock();
  228. if( !datenbank->befehl( befehl->getText() ) )
  229. {
  230. unlock();
  231. befehl->release();
  232. return 6;
  233. }
  234. Result res = datenbank->getResult();
  235. unlock();
  236. befehl->release();
  237. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  238. if( res.zeilenAnzahl > 1 )
  239. *gruppe_id = TextZuInt( res.values[ 1 ].getText(), 10 );
  240. res.destroy();
  241. return ret;
  242. }
  243. bool ASDatenbank::gruppeAnmelden( int accountId, int gruppeId )
  244. {
  245. Text *befehl = new Text( "SELECT * FROM gruppe WHERE id = " );
  246. befehl->append( gruppeId );
  247. befehl->append( " AND admin_account_id = " );
  248. befehl->append( accountId );
  249. lock();
  250. datenbank->befehl( befehl->getText() );
  251. if( !datenbank->getZeilenAnzahl() )
  252. {
  253. unlock();
  254. befehl->release();
  255. return 0;
  256. }
  257. unlock();
  258. befehl->setText( "SELECT gruppe_anmelden( " );
  259. befehl->append( gruppeId );
  260. befehl->append( " )" );
  261. lock();
  262. if( !datenbank->befehl( befehl->getText() ) )
  263. {
  264. unlock();
  265. befehl->release();
  266. return 0;
  267. }
  268. unlock();
  269. befehl->release();
  270. return 1;
  271. }
  272. bool ASDatenbank::gruppeAbmelden( int accountId, int gruppeId )
  273. {
  274. Text *befehl = new Text( "SELECT * FROM gruppe WHERE id = " );
  275. befehl->append( gruppeId );
  276. befehl->append( " AND admin_account_id = " );
  277. befehl->append( accountId );
  278. lock();
  279. datenbank->befehl( befehl->getText() );
  280. if( !datenbank->getZeilenAnzahl() )
  281. {
  282. unlock();
  283. befehl->release();
  284. return 0;
  285. }
  286. unlock();
  287. befehl->setText( "SELECT gruppe_abmelden( " );
  288. befehl->append( gruppeId );
  289. befehl->append( " )" );
  290. lock();
  291. if( !datenbank->befehl( befehl->getText() ) )
  292. {
  293. unlock();
  294. befehl->release();
  295. return 0;
  296. }
  297. unlock();
  298. befehl->release();
  299. return 1;
  300. }
  301. bool ASDatenbank::setGruppeSpielStarten( int accountId, int gruppeId, bool starten )
  302. {
  303. Text *befehl = new Text( "SELECT * FROM gruppe WHERE id = " );
  304. befehl->append( gruppeId );
  305. befehl->append( " AND admin_account_id = " );
  306. befehl->append( accountId );
  307. lock();
  308. datenbank->befehl( befehl->getText() );
  309. if( !datenbank->getZeilenAnzahl() )
  310. {
  311. unlock();
  312. befehl->release();
  313. return 0;
  314. }
  315. befehl->setText( "UPDATE gruppe SET spiel_starten = " );
  316. if( starten )
  317. befehl->append( "TRUE" );
  318. else
  319. befehl->append( "FALSE" );
  320. befehl->append( " WHERE id = " );
  321. befehl->append( gruppeId );
  322. datenbank->befehl( "BEGIN;" );
  323. datenbank->befehl( "LOCK TABLE lock_table;" );
  324. if( !datenbank->befehl( befehl->getText() ) )
  325. {
  326. datenbank->befehl( "ROLLBACK;" );
  327. unlock();
  328. befehl->release();
  329. return 0;
  330. }
  331. datenbank->befehl( "COMMIT;" );
  332. unlock();
  333. befehl->release();
  334. return 1;
  335. }
  336. bool ASDatenbank::getGruppeSpielStarten( int gruppeId )
  337. {
  338. Text *befehl = new Text( "SELECT spiel_starten FROM gruppe WHERE id = " );
  339. befehl->append( gruppeId );
  340. lock();
  341. datenbank->befehl( befehl->getText() );
  342. if( !datenbank->getZeilenAnzahl() )
  343. {
  344. unlock();
  345. befehl->release();
  346. return 0;
  347. }
  348. Result res = datenbank->getResult();
  349. unlock();
  350. befehl->release();
  351. if( !res.zeilenAnzahl )
  352. {
  353. res.destroy();
  354. return 0;
  355. }
  356. bool ret = res.values[ 0 ].istGleich( "t" );
  357. res.destroy();
  358. return ret;
  359. }
  360. bool ASDatenbank::proveEinladung( int vonAccount, int zuAccount, int gruppeId )
  361. {
  362. Text *befehl = new Text( "SELECT * FROM gruppe WHERE id = " );
  363. befehl->append( gruppeId );
  364. befehl->append( " AND admin_account_id = " );
  365. befehl->append( vonAccount );
  366. lock();
  367. datenbank->befehl( befehl->getText() );
  368. if( !datenbank->getZeilenAnzahl() )
  369. {
  370. unlock();
  371. return 0;
  372. }
  373. befehl->setText( "SELECT spieler_kann_spielen( " );
  374. befehl->append( zuAccount );
  375. befehl->append( " )" );
  376. if( !datenbank->befehl( befehl->getText() ) )
  377. {
  378. unlock();
  379. befehl->release();
  380. return 0;
  381. }
  382. Result res = datenbank->getResult();
  383. unlock();
  384. befehl->release();
  385. bool ret = TextZuInt( res.values[ 0 ].getText(), 10 ) == 6;
  386. res.destroy();
  387. return ret;
  388. }
  389. int ASDatenbank::gruppeBetreten( int accountId, int gruppeId )
  390. {
  391. Text *befehl = new Text( "SELECT spieler_betritt_gruppe( " );
  392. befehl->append( accountId );
  393. befehl->append( ", " );
  394. befehl->append( gruppeId );
  395. befehl->append( " )" );
  396. lock();
  397. if( !datenbank->befehl( befehl->getText() ) )
  398. {
  399. unlock();
  400. befehl->release();
  401. return 6;
  402. }
  403. Result res = datenbank->getResult();
  404. unlock();
  405. befehl->release();
  406. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  407. res.destroy();
  408. return ret;
  409. }
  410. int ASDatenbank::gruppeVerlassen( int accountId, int gruppeId )
  411. {
  412. Text *befehl = new Text( "SELECT spieler_verlaesst_gruppe( " );
  413. befehl->append( accountId );
  414. befehl->append( ", " );
  415. befehl->append( gruppeId );
  416. befehl->append( " )" );
  417. lock();
  418. if( !datenbank->befehl( befehl->getText() ) )
  419. {
  420. unlock();
  421. befehl->release();
  422. return 0;
  423. }
  424. Result res = datenbank->getResult();
  425. unlock();
  426. befehl->release();
  427. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  428. res.destroy();
  429. return ret;
  430. }
  431. bool ASDatenbank::spielerKannKicken( int accountId, int gruppeId )
  432. {
  433. Text *befehl = new Text( "SELECT * FROM gruppe WHERE id = " );
  434. befehl->append( gruppeId );
  435. befehl->append( " AND admin_account_id = " );
  436. befehl->append( accountId );
  437. bool ret = 1;
  438. lock();
  439. datenbank->befehl( befehl->getText() );
  440. if( !datenbank->getZeilenAnzahl() )
  441. ret = 0;
  442. unlock();
  443. return ret;
  444. }
  445. bool ASDatenbank::getSpielerInGruppe( int gruppeId, Array< int > *accountId, int *anzahl )
  446. {
  447. Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
  448. befehl->append( gruppeId );
  449. lock();
  450. if( !datenbank->befehl( befehl->getText() ) )
  451. {
  452. unlock();
  453. befehl->release();
  454. return 0;
  455. }
  456. Result res = datenbank->getResult();
  457. unlock();
  458. befehl->release();
  459. *anzahl = res.zeilenAnzahl;
  460. for( int i = 0; i < *anzahl; i++ )
  461. accountId->add( TextZuInt( res.values[ i ].getText(), 10 ), i );
  462. res.destroy();
  463. return 1;
  464. }
  465. int ASDatenbank::getSpielerInGruppeAnzahl( int gruppeId )
  466. {
  467. Text *befehl = new Text( "SELECT account_id FROM gruppe_spieler WHERE gruppe_id = " );
  468. befehl->append( gruppeId );
  469. lock();
  470. if( !datenbank->befehl( befehl->getText() ) )
  471. {
  472. unlock();
  473. befehl->release();
  474. return 0;
  475. }
  476. int ret = datenbank->getZeilenAnzahl();
  477. unlock();
  478. befehl->release();
  479. return ret;
  480. }
  481. int ASDatenbank::getGruppeAdminId( int gruppeId )
  482. {
  483. Text *befehl = new Text( "SELECT admin_account_id FROM gruppe WHERE id = " );
  484. befehl->append( gruppeId );
  485. lock();
  486. if( !datenbank->befehl( befehl->getText() ) )
  487. {
  488. unlock();
  489. befehl->release();
  490. return 0;
  491. }
  492. Result res = datenbank->getResult();
  493. unlock();
  494. befehl->release();
  495. if( !res.zeilenAnzahl )
  496. {
  497. res.destroy();
  498. return 0;
  499. }
  500. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  501. res.destroy();
  502. return ret;
  503. }
  504. bool ASDatenbank::gruppeSpielerEinladen( int vonAccount, int zuAccount, int gruppeId )
  505. {
  506. if( proveEinladung( vonAccount, zuAccount, gruppeId ) )
  507. {
  508. Text *befehl = new Text( "INSERT INTO gruppe_einladung( gruppe_id, account_id ) VALUES( " );
  509. befehl->append( gruppeId );
  510. befehl->append( ", " );
  511. befehl->append( zuAccount );
  512. befehl->append( " )" );
  513. lock();
  514. if( !datenbank->befehl( befehl->getText() ) )
  515. {
  516. unlock();
  517. befehl->release();
  518. return 0;
  519. }
  520. unlock();
  521. befehl->release();
  522. return 1;
  523. }
  524. return 0;
  525. }
  526. bool ASDatenbank::gruppeEinladungAbbrechen( int admin, int gruppeId, int accountId )
  527. {
  528. if( admin == getGruppeAdminId( gruppeId ) )
  529. {
  530. Text *befehl = new Text( "DELETE FROM gruppe_einladung WHERE gruppe_id = " );
  531. befehl->append( gruppeId );
  532. befehl->append( " AND account_id = " );
  533. befehl->append( accountId );
  534. lock();
  535. if( !datenbank->befehl( befehl->getText() ) )
  536. {
  537. unlock();
  538. befehl->release();
  539. return 0;
  540. }
  541. unlock();
  542. befehl->release();
  543. return 1;
  544. }
  545. return 0;
  546. }
  547. bool ASDatenbank::gruppeSpielerIstEingeladen( int gruppeId, int accountId )
  548. {
  549. Text *befehl = new Text( "SELECT * FROM gruppe_einladung WHERE gruppe_id = " );
  550. befehl->append( gruppeId );
  551. befehl->append( " AND account_id = " );
  552. befehl->append( accountId );
  553. lock();
  554. if( !datenbank->befehl( befehl->getText() ) )
  555. {
  556. unlock();
  557. befehl->release();
  558. return 0;
  559. }
  560. bool ret = datenbank->getZeilenAnzahl() != 0;
  561. unlock();
  562. befehl->release();
  563. return ret;
  564. }
  565. bool ASDatenbank::gruppeIstInWarteschlange( int gruppeId )
  566. {
  567. Text *befehl = new Text( "SELECT * FROM gruppe_anmeldung_fuer_spiel WHERE gruppe_id = " );
  568. befehl->append( gruppeId );
  569. lock();
  570. if( !datenbank->befehl( befehl->getText() ) )
  571. {
  572. unlock();
  573. befehl->release();
  574. return 0;
  575. }
  576. bool ret = datenbank->getZeilenAnzahl() != 0;
  577. unlock();
  578. befehl->release();
  579. return ret;
  580. }
  581. int ASDatenbank::getAccountId( int clientId )
  582. {
  583. Text *befehl = new Text( "SELECT account_id FROM account_client WHERE client_id = " );
  584. befehl->append( clientId );
  585. lock();
  586. if( !datenbank->befehl( befehl->getText() ) )
  587. {
  588. unlock();
  589. befehl->release();
  590. return 0;
  591. }
  592. if( !datenbank->getZeilenAnzahl() )
  593. {
  594. unlock();
  595. befehl->release();
  596. return 0;
  597. }
  598. Result res = datenbank->getResult();
  599. unlock();
  600. befehl->release();
  601. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  602. res.destroy();
  603. return ret;
  604. }
  605. int ASDatenbank::accountAnmelden( int accountId, int karteId )
  606. {
  607. Text *befehl = new Text( "SELECT account_anmelden( " );
  608. befehl->append( accountId );
  609. befehl->append( ", " );
  610. befehl->append( karteId );
  611. befehl->append( " )" );
  612. lock();
  613. if( !datenbank->befehl( befehl->getText() ) )
  614. {
  615. unlock();
  616. befehl->release();
  617. return 6;
  618. }
  619. Result res = datenbank->getResult();
  620. unlock();
  621. befehl->release();
  622. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  623. res.destroy();
  624. return ret;
  625. }
  626. void ASDatenbank::accountAbmelden( int accountId )
  627. {
  628. Text *befehl = new Text( "SELECT account_abmelden( " );
  629. befehl->append( accountId );
  630. befehl->append( " )" );
  631. lock();
  632. datenbank->befehl( befehl->getText() );
  633. unlock();
  634. befehl->release();
  635. }
  636. bool ASDatenbank::spielerBesitztKarte( int accountId, int karteId )
  637. {
  638. Text *befehl = new Text( "SELECT a.account_id FROM spiel_art_account a, karte_account b, karte c WHERE a.account_id = " );
  639. befehl->append( accountId );
  640. befehl->append( " AND a.spiel_art_id = c.spiel_art_id AND b.karte_id = c.id AND b.account_id = a.account_id AND c.id = " );
  641. befehl->append( karteId );
  642. lock();
  643. if( !datenbank->befehl( befehl->getText() ) )
  644. {
  645. unlock();
  646. befehl->release();
  647. return 0;
  648. }
  649. int zeilen = datenbank->getZeilenAnzahl();
  650. unlock();
  651. befehl->release();
  652. return zeilen != 0;
  653. }
  654. int ASDatenbank::getGruppenKarte( int gruppeId )
  655. {
  656. Text *befehl = new Text( "SELECT karte_id FROM gruppe WHERE id = " );
  657. befehl->append( gruppeId );
  658. lock();
  659. if( !datenbank->befehl( befehl->getText() ) )
  660. {
  661. unlock();
  662. befehl->release();
  663. return 0;
  664. }
  665. Result res = datenbank->getResult();
  666. unlock();
  667. befehl->release();
  668. if( !res.zeilenAnzahl )
  669. {
  670. res.destroy();
  671. return 0;
  672. }
  673. int ret = TextZuInt( res.values[ 0 ].getText(), 10 );
  674. res.destroy();
  675. return ret;
  676. }
  677. Text *ASDatenbank::getAccountRufName( int accountId )
  678. {
  679. Text *befehl = new Text( "SELECT ruf_name FROM account WHERE id = " );
  680. befehl->append( accountId );
  681. lock();
  682. datenbank->befehl( befehl->getText() );
  683. Result res = datenbank->getResult();
  684. unlock();
  685. befehl->release();
  686. if( !res.zeilenAnzahl )
  687. {
  688. res.destroy();
  689. return new Text( "" );
  690. }
  691. Text *ret = new Text( res.values[ 0 ].getText() );
  692. res.destroy();
  693. return ret;
  694. }
  695. // constant
  696. Text *ASDatenbank::getLetzterFehler() const
  697. {
  698. return datenbank->getLetzterFehler();
  699. }
  700. // Reference Counting
  701. ASDatenbank *ASDatenbank::getThis()
  702. {
  703. ref++;
  704. return this;
  705. }
  706. ASDatenbank *ASDatenbank::release()
  707. {
  708. ref--;
  709. if( !ref )
  710. delete this;
  711. return 0;
  712. }