Toon posts:

[Delphi 7] QuickReport & QRMemo & MySQL

Pagina: 1
Acties:
  • 149 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb het volgende probleem. Vanaf een form wordt een memo in de MySQL database geplaatst zodra er op "OK" geklikt wordt:

code:
1
2
3
4
5
6
    with data.QSave do  //QSave is een query
      begin
        SQL.Clear;
        SQL.Add('UPDATE ....<tabel>.... SET Memo = '+QuotedStr(memoOpmerking.Text)+' WHERE ..... = .....');
        ExecSQL;
      end; //with


Dit gaat goed, de memo komt netjes in de DB te staan. Maar nu wil ik de opgeslagen text koppelen aan een QRMemo op een QuickReport, dit krijg ik niet voor elkaar. QRMemo heeft 2 properties die er volgens mij wat mee te maken kunnen hebben: "Caption" (Type : String) en "Lines" (Type : TStrings) Ik denk dat het voornamelijk om de laatste gaat.

Ik dacht het zo op te lossen:

code:
1
2
3
4
5
6
7
8
var s : TStrings;
begin
  s[1] := data.QTemp.FieldByName('Memo').AsString; //de query QTemp bevat de memo van het opgevraagde record.
  with FormReport do
     begin
       QRMemo.Lines := s;
     end;
end;


Het wordt wel goed gecompiled maar ik krijg een access-violation zodra ik het report opvraag. :'(

Kan iemand helpen?

[ Voor 19% gewijzigd door Verwijderd op 09-09-2003 10:27 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ja.
Weet je wt een access violation is? Je zult ergens schrijven naar of lezen uit een stuk niet gealloceerd geheugen.

Het data-type TStrings ken ik trouwens niet. Ik ken wel string en TStringList.
Heb je al eens gedebugged en gekeken op welke regel je die foutmelding krijgt? Nee, doe dat dan eerst. (Ik zou het hier wel kunnen gaan zeggen, maar dan leer je er niets uit).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 09 September 2003 @ 10:13:
Ja.
Weet je wt een access violation is? Je zult ergens schrijven naar of lezen uit een stuk niet gealloceerd geheugen.

Het data-type TStrings ken ik trouwens niet. Ik ken wel string en TStringList.
Heb je al eens gedebugged en gekeken op welke regel je die foutmelding krijgt? Nee, doe dat dan eerst. (Ik zou het hier wel kunnen gaan zeggen, maar dan leer je er niets uit).
Tuurlijk heb ik wel verder gekeken. De foutmelding treedt op bij:
code:
1
s[1] := data.QTemp.FieldByName('Memo').AsString

Terwijl er gewoon een string aan een string toegekend wordt.
Het data-type TStrings ken ik trouwens niet.
Dat ligt aan jou. Heb je al eens in de help gekeken? Nee, doet dat dan eerst. :)
Is gewoon het type van een propertie van een control. In dit geval van de property "lines" van een QRMemo.

[ Voor 21% gewijzigd door Verwijderd op 09-09-2003 10:33 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ik doe niet 'chaggie'.

Wel, denk nu eens goed na, en lees nog eens de opmerking die ik maakte in m'n vorige post over dat niet gealloceerd geheugen....
Je assigned een string naar een stuk nog niet gealloceerd geheugen. Als je een watch zet op s, of op s[1], dan zal je zien wat er scheelt...

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

TStrings is de basisklasse voor o.a. TStringList, maar kan/hoor je niet zonder een afgeleide te gebruiken. Bovendien is het een klasse en die horen eerst gecreerd te worden voordat je er wat mee kan gaan doen. Dat doe je dus niet. Whoami heeft dus wel gelijk, alhoewel ie niet wist dat TStrings bestond. :)

Probeer dit eens:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
var s : TStrings;
begin
  s := TStringList.Create;
  try
    s[1] := data.QTemp.FieldByName('Memo').AsString;
    with FormReport do 
    begin
       QRMemo.Lines := s;
     end;
  finally
    s.Free;
  end;
end;


S[1] := kan je veel netter vervangen door S.Text := en bovendien zie ik niet helemaal waarom je het nu in een TStrings wil stoppen ipv meteen in de QRMemo.Lines. Dit doet ook wat je wilt:
Delphi:
1
2
3
begin
  FormReport.QRMemo.Lines.Text := data.QTemp.FieldByName('Memo').AsString;
end;


/edit
Sorry whoami, ik zie net dat ik het al verklapt heb voor m |:(

[ Voor 6% gewijzigd door LordLarry op 09-09-2003 10:50 ]

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
LordLarry schreef op 09 September 2003 @ 10:43:
TStrings is de basisklasse voor o.a. TStringList, maar kan/hoor je niet zonder een afgeleide te gebruiken. Bovendien is het een klasse en die horen eerst gecreerd te worden voordat je er wat mee kan gaan doen.
Een abstract class dus.
Ik heb me nooit zo verdiept in de class-hierarchy van de VCL, vandaar. :)
bovendien zie ik niet helemaal waarom je het nu in een TStrings wil stoppen ipv meteen in de QRMemo.Lines. Dit doet ook wat je wilt:
Delphi:
1
2
3
begin
  FormReport.QRMemo.Lines.Text := data.QTemp.FieldByName('Memo').AsString;
end;
Mja, ik snap ook niet waarom de TS dit doet.
Heb je daarnaast trouwens ook geen QRDBMemo component oid?

https://fgheysels.github.io/


Verwijderd

Topicstarter
nu voel ik me echt een }:O

Ik dacht dat lines[i] de strings zelf waren. dus... thanks LordLarry
je hebt dus lines.text en anders is het altijd nog lines.strings[i]

Maar ik heb inderdaad meer geleerd van de hulp van whoami. ;)
Met die watch kwam ik inderdaad al vreemde dingen tegen.

[ Voor 14% gewijzigd door Verwijderd op 09-09-2003 10:54 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 09 september 2003 @ 10:54:
Ik dacht dat lines[i] de strings zelf waren. dus... thanks LordLarry
je hebt dus lines.text en anders is het altijd nog lines.strings[i]
lines.strings[i] is een bepaalde regel uit de collectie van strings. lines[i] is de verkorte versie daarvoor en aangezien het minder tikken is, is dit beter :). lines.text is de gehele collectie van strings achter elkaar.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1