aula

26/04/2004

0

ae, to de saco cheio das frescuras da Qt

alguem poderia colcar um codigo aqui OO mostrando como a Qt espera que a gente programe?

flw


Rfpsatin

Rfpsatin

Responder

Posts

14/05/2004

Marcelo.c

???

Além do DataModule, qual seriam os problemas encontrados ?


Responder

15/05/2004

Rfpsatin

o maior problema que estou achando eh o seguinte.

Numa aplicacao delphi normal, uma vez que vc deixe o seu datamodule no auto-create vc ja tem um objecto da classe datamodule criado e vc pode se referir a ele onde q quando quiser (desde que vc nao dee um free neste objeto). Isso eh conseguido de cara pois na definicao da sua classe do datamudule existe uma variavel que ja esta sendo definida do tipo TDatamodule e com isso tenho um objeto (p.ex Datamodule1) que eh do tipo TDatamodule que por sua vez tem os objetos de conexao com o banco e posso usar onde quiser, basta que onde quer que eu esteja me referencie a ele. Tipo, se eu criar um componente quallquer de operacao com o banco, uma query p.ex, basta assossiar a este datamodule para conexao.

Bem, com o Kylix pelo jeito as coisas saum um pouco mais chatas, se eu deixo ele funcionar da mesma forma como no delphi (como descrevi acima) ele athe funciona contudo ele nao ta controlando transacao. Ele funcioina na 1a. vez contudo da segunda em diante ele comeca a dar problema. Tipo assi,m, se eu clico no bota na 1a vez ele controla, da segunda em diante isso nao ocorre. Coloquei um SQLMonitor para analisar como estao indo os dados, obtive que na primeira vez ele manda o BEGIN (qdo starto a transacao) e o COMMIT OU ROLLBACK quando encerro. Da segunda em diate isso nao vai, vai apenas o BEGIN. Ta muito confuso, ta muito doido, soh sei que esta tudo aparentemente correto contudo nao esta controlando transacao.

QQ dica, manda ae.

abraco.

Ricardo


Responder

15/05/2004

Rfpsatin

??? Além do DataModule, qual seriam os problemas encontrados ?


vc mencionou o datamodule, ha algum bug conhecido com relacao a ele por isso vc sitou de cara ou eu falei algo sobre os problemas que estou tendo com ele noutra mensagem?

abraco.

Ricardo


Responder

18/05/2004

Rfpsatin

Dae, acho que os problemas foram resolvidos. Amanha (19/05/2004) vou marretar ele com testes. se tudo ocorrer bem conto aqui o que fiz.


Responder

19/05/2004

Marcelo.c

... ou eu falei algo sobre os problemas que estou tendo com ele noutra mensagem?
:wink:

Dae, acho que os problemas foram resolvidos. Amanha (19/05/2004) vou marretar ele com testes. se tudo ocorrer bem conto aqui o que fiz.
:wink:


Responder

28/05/2004

Rfpsatin

Salve Pessoal, ja tem tempo que estou apanhando do kylix com relacao de controle de transacoes no postgresql. ja to desanimado. Uso o Kylix3 enterprise sem update pack e postgresql 7.2.2 (ja testei com 7.3.4 e 7.4.X).

O que ocorre eh o seguinte.
1)Abro uma transacao.
2)dou um insert nela
3)dou um select nela (para ver se o dado foi inserido e defato ele me retorna o valor)
4)dou um delete nela(e ele mata o dado).

Este eh um programa de teste q fiz para ver o seguinte.

Pelo que percebi se dentro de uma procedure eu chamo inicio de transacao e faco inserts e select´s tudo ocorre bem, contudo, se chamo outras funcoes que tentem dar selectes nele ele simplesmente nao encontra.

O que me parece estar ocorrendo eh o seguinte.

>Abro uma transacao
>dou um insert dentro da transacao(blz, tudo esta bem, so EU posso ver este dado pois ainda nao dei commit)

> abaixo dou um select(acho blz, pois estou dentro da minha transacao e eu posso ver o que escrevo)

> chamo uma funcao que tenta fazer um select(nao acha, ao que parece ele age como se estivesse FORA da transacao e consequentemente nao consegue VER o dado que inseri)

Isso eh muito estranho, na faz sentido pois tudo esta dentro do mesmo bloco.

vou postar aqui o fonte deste exemplo. Fiz esse exemplo pois algo parecido esta ocorrendo num programa maior e preciso resolver urgente.

Por favor, qualquer ajuda eh bem-vinda.

PS. estou usando DBX.

----------------------------- fonte ---------------------

unit Unit1;

interface

uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls, DBXpress, DB, SqlExpr;

type
TForm1 = class(TForm)
ConDatabase: TSQLConnection;
ConFabio: TSQLConnection;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function mostra(codigo:integer):string;
function mostra2(codigo:integer):string;
end;

var
Form1: TForm1;

implementation

{$R *.xfm}

procedure TForm1.Button1Click(Sender: TObject);
var falha:boolean;
qry:TSqldataset;
apagados:integer;
TD1: TTransactionDesc;
begin


TD1.TransactionID := 0;
TD1.GlobalID:=0;
TD1.IsolationLevel := xilREADCOMMITTED;

try

ConDatabase.StartTransaction(TD1);


try
try
qry:=TSQLDataSet.Create(self);
qry.SQLConnection:=ConDatabase;
qry.CommandType:=ctQuery;

qry.CommandText:=´insert into tab1 values (1,´ + QuotedStr(´hehe´) + ´)´;
qry.ExecSQL();

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
end;
end;
finally
FreeAndNil(qry);
end;

try
try
qry:=TSQLDataSet.Create(self);
qry.SQLConnection:=ConDatabase;
qry.CommandType:=ctQuery;

qry.CommandText:=´select codigo from tab1 where codigo=:codigo´;
qry.ParamByName(´codigo´).AsInteger:=1;
qry.Open;
showmessage(´na origem, achei >´ + qry.Fields[0].asstring);
self.mostra(qry.Fields[0].AsInteger);

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
end;
end;
finally
FreeAndNil(qry);
end;


try
try
qry:=TSQLDataSet.Create(self);
qry.SQLConnection:=ConDatabase;
qry.CommandType:=ctQuery;

qry.CommandText:=´delete from tab1 where codigo=:codigo´;
qry.ParamByName(´codigo´).AsInteger:=1;
apagados:=qry.ExecSQL();
showmessage(inttostr(apagados));

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
end;
end;
finally
FreeAndNil(qry);
end;


ConDatabase.Commit(TD1)

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
ConDatabase.Rollback(TD1);
end;
end;

end;

function TForm1.mostra(codigo: integer): string;
var
qry:TSqldataset;
begin
try
try
qry:=TSQLDataSet.Create(self);
qry.SQLConnection:=ConDatabase;
qry.CommandType:=ctQuery;

qry.CommandText:=´select codigo from tab1 where codigo=:codigo´;
qry.ParamByName(´codigo´).AsInteger:=codigo;
qry.Open;
showmessage(´mostra>´ + qry.Fields[0].asstring);

result:=((self.mostra2(qry.Fields[0].asInteger)));

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
end;
end;
finally
FreeAndNil(qry);
end;
end;

function TForm1.mostra2(codigo: integer): string;
var
qry:TSqldataset;
begin
try
try
qry:=TSQLDataSet.Create(self);
qry.SQLConnection:=ConDatabase;
qry.CommandType:=ctQuery;

qry.CommandText:=´select codigo from tab1 where codigo=:codigo´;
qry.ParamByName(´codigo´).AsInteger:=codigo;
qry.Open;
showmessage(´mostra2>´ + qry.Fields[0].asstring);
result:=(qry.Fields[0].asstring);

except on e:Exception do
begin
showmessage(´ocorreu o seguinte erro: ´ + e.message);
end;
end;
finally
FreeAndNil(qry);
end;
end;

end.


Responder

28/05/2004

Marcelo.c

Será que não é algum problema com os componentes DBX ???

Comigo aconteceu algo semelhante, mas com IBX. Atualizei a versão e acabou o problema.


Responder

28/05/2004

Rfpsatin

Será que não é algum problema com os componentes DBX ??? Comigo aconteceu algo semelhante, mas com IBX. Atualizei a versão e acabou o problema.


provavel. Como atualizo o DBX?


Responder

01/06/2004

Marcelo.c

provavel. Como atualizo o DBX?
Agora fiquei na dúvida. Não encontrei nada sobre atualizações para o DBX.


Responder

03/06/2004

Rfpsatin

[quote:a13af481f4=´rfpsatin´]provavel. Como atualizo o DBX?
Agora fiquei na dúvida. Não encontrei nada sobre atualizações para o DBX.[/quote:a13af481f4]

DBX eh da borland ou de terceiros?

acheoi um site q tem algo para ele + nao eh free.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar