Run it in a debugger and tell us on which line it crashes?

And you're using the mysql4 unit. You know what the consequences are?
What's the version of you're mysql-client?

(And ask yourself: do I really want to use mysql?)

On Tue, 2006-09-19 at 10:13 +0200, A.J. Venter wrote:
> Mmm,
> So does nobody know what I'm doing wrong ? Or is it not a problem in my code 
> ? 
> Any idea what I should check ?
> 
> A.J.
> On Monday 18 September 2006 15:17, A.J. Venter wrote:
> > I have just started on a new project, which is mysql backed - beginning
> > with a fairly abstract unit which a large number of different lazarus
> > programs will use to communicate with the DB.
> >
> > But I ran into a very strange problem quite early on, I can connect to the
> > DB without hassles, but as soon as I try to do a query - I get a crash, and
> > I have no idea why... :S
> >
> > My current test calls look like this:
> >
> > ZC_DBConnect;
> > ZC_Settings : TZC_Settings.Create;
> >     Writeln(ZC_Settings.GetPricePerUnit);
> >
> > TraceBack says it's crashing on line 96:
> >   if (mysql_query(socket,pchar(Query)) < 0) then
> >
> >
> > The unit in full goes:
> > unit libzybacafe;
> >
> > {$mode objfpc}{$H+}
> >
> > interface
> >
> > uses
> >   Classes, SysUtils,dialogs,mysql4;
> >
> > procedure ZC_DBConnect;
> > Function ZC_DBQuery(Query:String):PMYSQL_RES;
> >
> > type
> >   TZC_Settings = class
> >   private
> >    {Private Declarations}
> >          FCurrencySymbol : String;
> >          FUnitLength : Integer;
> >          FPricePerUnit : Real;
> >          FResult : PMySQL_RES;
> >          FRow: MYSQL_ROW;
> >          Procedure LoadFromDB;
> >          Procedure SaveToDB;
> >     public
> >     { public declarations }
> >          Function GetCurrencySymbol : String;
> >          Function GetUnitLength : Integer;
> >          Function GetPricePerUnit: Real;
> >          Procedure SetCurrencySymbol(NewSymbol:String);
> >          Procedure SetUnitLength(NewLength:Integer);
> >          Procedure SetPricePerUnit(NewPrice : Real);
> >   end;
> >
> > Var
> >  Socket : PMysQL;
> >
> > implementation
> >
> > procedure ZC_DBConnect;
> > Var
> >     DBCFG : TSTringList;
> >     I : Integer;
> >     H,U,P,D : String;
> >   qmysql : TMYSQL;
> >   alloc : PMYSQL;
> >
> > Begin
> > DBCFG := TSTringList.Create;
> > Try
> > {$IFDEF Unix}
> >    DBCFG.LoadFromFile('/etc/zybacafe.cfg');
> > {$ENDIF}
> > {$IFDEF Win32}
> >    DBCFG.LoadFromFile('C:\Program Files\ZybaCafe\zybacafe.cfg');
> > {$ENDIF}
> > except
> >       ShowMessage ('Error Loading database configuration !');
> >       Halt;
> > end;
> > For I := 0 to DBCFG.Count -1 do
> > begin
> >      If pos('HOST=',uppercase(DBCFG[I])) <> 0 then
> >         begin
> >              H := DBCFG[I];
> >              Delete(H,1,pos('=',H));
> >         end;
> >      If pos('USERNAME=',uppercase(DBCFG[I])) <> 0 then
> >         begin
> >              U := DBCFG[I];
> >              Delete(U,1,pos('=',U));
> >         end;
> >      If pos('PASSWORD=',uppercase(DBCFG[I])) <> 0 then
> >         begin
> >              P := DBCFG[I];
> >              Delete(P,1,pos('=',P));
> >         end;
> >      If pos('DATABASE=',uppercase(DBCFG[I])) <> 0 then
> >         begin
> >              D := DBCFG[I];
> >              Delete(D,1,pos('=',D));
> >         end;
> >
> > end;
> >  alloc := mysql_init(PMYSQL(@qmysql));
> >   socket :=  mysql_real_connect(alloc, pchar(h), pchar(u),
> > pchar(p),pchar(d), 0, nil, 0);
> >   if socket=Nil then
> >     begin
> >          ShowMessage('Error connecting to
> > database:'+LineEnding+StrPas(mysql_error(@qmysql)));
> >          halt;
> >     end;
> > end;
> >
> > Function ZC_DBQuery(Query:String):PMYSQL_RES;
> > Var RecBuf : PMYSQL_RES;
> > Begin
> >   if (mysql_query(socket,pchar(Query)) < 0) then
> >      begin
> >        ShowMessage('Query failed '+ StrPas(mysql_error(socket)));
> >      end
> > else
> >      begin
> >        recbuf := mysql_store_result(socket);
> >        if RecBuf=Nil then
> >        begin
> >          ShowMessage('Query returned nil result.');
> >        end else
> >         ZC_DBQuery := RecBuf;
> >      end;
> > end;
> >
> > Procedure TZC_Settings.LoadFromDB;
> > Var Result : PMYSQL_RES;
> >     Q : String;
> > Begin
> >     FResult := ZC_DBQuery('SELECT * FROM settings;');
> >     FRow := Mysql_Fetch_Row(FResult);
> >      If FRow = Nil then
> >      begin
> >         showMessage('You have no stored site-settings.'+LineEnding+'Setting
> > all to defaults');
> >         FCurrencySymbol := '$';
> >         FUnitLength := 1;
> >         FPricePerUnit := 1.0;
> >          Q := 'INSERT INTO settings VALUES("","'+FCurrencySymbol;
> >          Q :=
> > Q+'","'+IntToStr(FUnitLength)+'","'+FloatToStr(FPricePerUnit)+'");';
> >          Result := ZC_DBQuery(Q);
> >      end else
> >      begin
> >        FCurrencySymbol := FRow[1];
> >        FUnitLength := StrToInt(FRow[2]);
> >        FPricePerUnit := StrToFloat(FRow[3]);
> >      end;
> >
> > end;
> >
> > Procedure TZC_Settings.SaveToDB;
> > Var
> > Query : String;
> > Begin
> >    Query := 'UPDATE TABLE settings SET currencysymbol="'+FCurrencySymbol;
> >    Query := Query+'",unitlength="'+IntToStr(FUnitLength);
> >    Query := Query+'",priceperunit="'+FloatToStr(FPricePerUnit)+';';
> >    FResult := ZC_DBQuery(Query);
> > end;
> >
> > Function TZC_Settings.GetCurrencySymbol : String;
> > Begin
> >      LoadFromDB;
> >      GetCurrencySymbol := FCurrencySymbol;
> > end;
> >
> > Function TZC_Settings.GetUnitLength : Integer;
> > Begin
> >      LoadFromDB;
> >      GetUnitLength := FUnitLength;
> > end;
> >
> > Function TZC_Settings.GetPricePerUnit: Real;
> > Begin
> >      LoadFromDB;
> >      GetPricePerUnit := FPricePerUnit;
> > end;
> >
> > Procedure TZC_Settings.SetCurrencySymbol(NewSymbol:String);
> > Begin
> >      FCurrencySymbol := NewSymbol;
> >      SaveToDB;
> > end;
> >
> > Procedure TZC_Settings.SetUnitLength(NewLength:Integer);
> > Begin
> >      FUnitLength := NewLength;
> >      SaveToDB;
> > end;
> >
> > Procedure TZC_Settings.SetPricePerUnit(NewPrice : Real);
> > Begin
> >     FPricePerUnit := NewPrice;
> >     SaveToDB;
> > end;
> >
> > initialization
> >
> >
> > end.
> 
-- 
Met vriendelijke groeten,

  Joost van der Sluis
  CNOC Informatiesystemen en Netwerken
  http://www.cnoc.nl

_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to