Dag iedereen,
Ik zit nu al enkele dagen te zoeken op een foutje, welke m'n programma doet vastlopen.
In m'n programma is het de bedoeling in een checklistbox een aantal metingen aan te duiden, die dan in een grafiek worden weergegeven via een database-gekoppelde query.
Wanneer ik in de listbox een item aanduid wordt volgende code uitgevoerd:
Waarbij DBConnect->CreateSeriesLink(selected) volgende functie aanroept:
Wanneer bovenstaande code wordt uitgevoerd worden de meetwaarden correct weergegeven in de grafiek die zichtbaar is wanneer ik PrintReport->Show() uitvoer. Wanneer ik m'n Quickreport nu echter wil afdrukken of bekijken via PrintReport->Print() of PrintReport->Preview() krijg ik volgende error:
Heeft er iemand enig idee aan wat dit kan liggen?
Wanneer ik manueel een serie toevoeg (in qreport.dfm) die gekoppeld is aan een pre-defined dataset, kan ik wel weer perfect printen.
Ik zit nu al enkele dagen te zoeken op een foutje, welke m'n programma doet vastlopen.
In m'n programma is het de bedoeling in een checklistbox een aantal metingen aan te duiden, die dan in een grafiek worden weergegeven via een database-gekoppelde query.
Wanneer ik in de listbox een item aanduid wordt volgende code uitgevoerd:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| void __fastcall TMainForm::ListBoxClick(TObject *Sender) { int i=0; unsigned char selected=0; FreeSeries(); for(i=0;i<ListBox->Count;i++) if(ListBox->Checked[i]) selected++; AantalSeries=selected; if(selected>0) { DBConnect->CreateSeriesLink(selected); AppCtrl->Series = new (TFastLineSeries*[selected]); selected=0; for(i=0;i<ListBox->Count;i++) { if(ListBox->Checked[i]) { AppCtrl->Series[selected]= new TFastLineSeries(this); DBConnect->ADOQuerySeriesLink[selected]->SQL->Text=AnsiString("SELECT * FROM meetwaarden WHERE meting=" + AnsiString(Metingen[i])).c_str(); //DBConnect->ADOQuerySeriesLink[selected]->ExecSQL(); //DBConnect->ADOQuerySeriesLink[selected]->CommandText=AnsiString("SELECT * FROM meetwaarden WHERE meting=" + AnsiString(Metingen[i])).c_str(); DBConnect->ADOQuerySeriesLink[selected]->Active=true; //TempChart->AddSeries(AppCtrl->Series[selected]); //TempChart->Legend->LegendStyle=lsSeries; PrintReport->QRDBChart1->AddSeries(AppCtrl->Series[selected]); PrintReport->QRDBChart1->Legend->LegendStyle=lsSeries; //AppCtrl->Series[selected]->FillSampleValues(8); AppCtrl->Series[selected]->DataSource = DBConnect->ADOQuerySeriesLink[selected]; AppCtrl->Series[selected]->Title=Metingentxt[i]; AppCtrl->Series[selected]->Marks->ArrowLength = 8; AppCtrl->Series[selected]->Marks->Visible = False; AppCtrl->Series[selected]->XValues->DateTime = False; AppCtrl->Series[selected]->XValues->Name = "X"; AppCtrl->Series[selected]->XValues->Multiplier = 1; AppCtrl->Series[selected]->XValues->Order = loAscending; AppCtrl->Series[selected]->XValues->ValueSource = "mstamp"; AppCtrl->Series[selected]->YValues->DateTime = False; AppCtrl->Series[selected]->YValues->Name = "Y"; AppCtrl->Series[selected]->YValues->Multiplier = 1; AppCtrl->Series[selected]->YValues->Order = loNone; AppCtrl->Series[selected]->YValues->ValueSource = "waarde"; selected++; } } } } |
Waarbij DBConnect->CreateSeriesLink(selected) volgende functie aanroept:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| void TDBConnect::CreateSeriesLink(unsigned char aantal) { unsigned char i; DeleteSeriesLink(); AantalSeries=aantal; ADOQuerySeriesLink = new (TADOQuery*[aantal]); for(i=0;i<aantal;i++) { ADOQuerySeriesLink[i] = new TADOQuery(this); ADOQuerySeriesLink[i]->Connection=ADOConnection; ADOQuerySeriesLink[i]->Prepared=true; } } |
Wanneer bovenstaande code wordt uitgevoerd worden de meetwaarden correct weergegeven in de grafiek die zichtbaar is wanneer ik PrintReport->Show() uitvoer. Wanneer ik m'n Quickreport nu echter wil afdrukken of bekijken via PrintReport->Print() of PrintReport->Preview() krijg ik volgende error:
Wanneer ik AppCtrl->Series[selected]->DataSource = DBConnect->ADOQuerySeriesLink[selected] uitcomment, kan ik het Report wel perfect afdrukken of bekijken (natuurlijk is de grafiek dan wel leeg).Project Test.exe raised exception class EAccessViolation with message 'Access violation at address 4032BCD4 in module 'dbrtl60.bpl'. Read of address 0000009D'. Process stopped. Use Step or Run to continue.
Heeft er iemand enig idee aan wat dit kan liggen?
Wanneer ik manueel een serie toevoeg (in qreport.dfm) die gekoppeld is aan een pre-defined dataset, kan ik wel weer perfect printen.