[C++/ZEOS/MySQL] select geeft lege resultset

Pagina: 1
Acties:

Onderwerpen


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Ik kom er niet uit, en google helpt me ook niet echt :(

ik gebruik Borland C++ Builder 6 i.c.m. met de ZEOS library voor communicatie met een MySQL database. Ik gebruikte hier een oude ZEOS library omdat ik nog contact maakte met een MySQL4 database. Dit werkte allemaal prima, maar vanwege problemen elders in de applicatie wil ik nu overstappen naar een hogere MySQL versie. Ik heb dus de laatste stable release van de ZEOS library (versie 6.6.6 (what's in a number)) geinstalleerd en MySQL 5.1 geinstalleerd. Als ik nu mijn applicatie test kom ik tot het volgende:

- er is connectie met de database.
- ik kan een Insert() en een Post() doen, dan worden records keurig in de database toegevoegd.

probleem:
Ik doe een hele simpele query:
code:
1
SELECT veld FROM tabel


deze query geeft in de command prompt zo'n 800 records. Als ik deze query echter uitvoer in mijn applicatie, dan krijg ik altijd 0 records terug. Ik heb al van alles geprobeerd met settings van de objecten, met settings van de database en gegoogled, maar ik kan de oplossing maar niet vinden.


dit is de code zoals het werkte met de oude ZEOS lib.
code:
1
2
3
4
5
6
7
8
QueryString = "SELECT veld FROM tabel";

ZQuery->Active = false;
ZQuery->SQL->Clear();
ZQuery->SQL->Add(QueryString);
ZQuery->Active = true;

AnsiString A = ZQuery->FieldByName("veld")->AsString;


mijn laatste versie die ik tot nu toe heb (maar dus geen reet helpt) is:
code:
1
2
3
4
5
6
7
8
9
10
QueryString = "SELECT veld FROM tabel";

ZQuery->Active = false;
ZQuery->SQL->Clear();
ZQuery->SQL->Add(QueryString);
// ZQuery->RequestLive = true;
// ZQuery->Active = true;
ZQuery->Open();

AnsiString A = ZQuery->FieldByName("veld")->AsString;


Iemand tips? Ik heb zelf het vermoeden dat ik het niet in de code moet zoeken, maar in de database settings, maar dat is maar een vermoeden.

(misschien dat dit nog nuttige info is: ik heb zowel libmysql.dll als libmysql51.dll geprobeerd)

uiteraard blijf ik doorpielen, en er valt me nog iets op: als ik de regel ZQuery->SQL->Add(QueryString) vervang door ZQuery->SQL->Text = QueryString en dan op die regel een breakpoint zet en daarna met de muis over ZQuery->SQL->Text beweeg dan zie ik dat niet alleen mijn QueryString in ZQuery->SQL->Text staat, maar dat er \r\n achter is geplakt. Ik heb geen idee hoe ik dat weg moet krijgen en of het er iets mee te maken heeft, maar ik dacht, ik deel het toch even (en ga er even verder mee pielen)

[ Voor 11% gewijzigd door P.O. Box op 25-11-2010 09:23 ]


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Zit je in je applicatie wel in de juiste database te kijken?

Wat doet
SQL:
1
QueryString = "SELECT veld FROM databaseName.tabel";

If money talks then I'm a mime
If time is money then I'm out of time


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Matis schreef op donderdag 25 november 2010 @ 11:28:
Zit je in je applicatie wel in de juiste database te kijken?

Wat doet
SQL:
1
QueryString = "SELECT veld FROM databaseName.tabel";
helaas, databaseName.tabel geeft hetzelfde resultaat. Overigens heb ik maar 1 database staan, dus hij kan niet in de verkeerde database kijken... als ik bewust een verkeerde kolomnaam in de query zet krijg ik ook keurig een error dat mijn query niet valide is.

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Ik ken ZEOS niet, maar als je nu eens
C++:
1
ZQuery->Last();

doet alvorens de waarde uit te lezen. Want je zit nu (misschien) op een niet bestaande row te lezen.

edit; zoiets dus:
C++:
1
2
3
4
5
6
7
8
9
10
11
QueryString = "SELECT veld FROM tabel";

ZQuery->Active = false;
ZQuery->SQL->Clear();
ZQuery->SQL->Add(QueryString);
// ZQuery->RequestLive = true;
// ZQuery->Active = true;
ZQuery->Open();
ZQuery->Last();

AnsiString A = ZQuery->FieldByName("veld")->AsString;

[ Voor 47% gewijzigd door Matis op 25-11-2010 11:51 ]

If money talks then I'm a mime
If time is money then I'm out of time


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik ben niet volledig genoeg geweest in mijn OP. Denk dat de OP dan ook erg lang was geweest :) Jouw idee heb ik inderdaad ook geprobeerd, maar dan met First(), maar er is blijkbaar echt geen record ofzo, want ook dan is het resultaat van A -> NULL.

heb het nu voor de zekerheid even getest met Last(), maar ook dan geen resultaat helaas.