Gravação Usuário

10/12/2005

Olá amigos, blz? Na minha aplicação, eu criei uma tela de cadastro de USUÁRIOS para utilizarem o sitema. A tabela de Usuários é composta pelos campos ID, NOME, COD_DEPTO, DEPTO, LOGIN, SENHA. Eu inseri um combobox onde, ao clicar no botão novo, é preenchido automaticamente com dados referentes a COD_DEPTO e DEPTO, que são originários da tabela DEPARTAMENTO, como segue abaixo:

procedure TfrmCadUsuarios.btnNovoClick(Sender: TObject);
begin
inherited;
...

with dmDepartamento.cdsDepto do
begin
close;
open;

while not Eof do
begin
cbbxUnidade.Items.Add(FieLDByName(´COD_DEPTO´).Text + ´ - ´ +
FieldByName(´DEPTO´).Text);
Next;
end;
end;

end;


A minha dúvida está na gravação, ou seja, se eu tenho um combobox que está recebendo dados de dois campos, como faço para gravá-lo na tabela de Usuários?

Eu tinha pensado em usar a função copy.

var
TD : TTransactionDesc;
Codigo : string;
Unidade : string;

begin
inherited;

Codigo := copy(cbbxDepto.Text, 0, 2);
Depto:= copy(cbbxDepto.Text, 4, 35);

try
...
with dmUsuarios.cdsUsuarios do
begin
...

FieldByName(´COD_DEPTO´).AsInteger := strtoint(Codigo);
FieldByName(´DEPTO´).AsString := Depto;
...

except
on E : Exception do
ShowMessage(E.Message);
...

Concluindo, o sistema não está pegando o cod. do depto e depto que estão no combobox e gravando na tabela.

Gostaria de saber qual seria a melhor forma de se resolver este problema.

Fico no aguardo.

Um abraço a todos.

Rogério


Roger1976

Respostas

10/12/2005

Roger1976

Ah, eu esqueci, dá a seguinte mensagem de erro qdo clico no gravar:

sqlConexao: There is no active transaction.


Responder Citar

10/12/2005

Edilcimar

não li todo o código, mas pela ultima informação coloque neste pedaço um ibtransacion.starttransaction, pois não tem um início de transação e não tem um ´edit´ ou ´append´, ou seja a tabela não sabe que está em modo de edição, é claro que vc não colocou o código inteiro e pode até ser que os mesmos estejam inclusos, por isto a minha afirmação!

with dmUsuarios.cdsUsuarios do
begin
...

FieldByName(´COD_DEPTO´).AsInteger := strtoint(Codigo);
FieldByName(´DEPTO´).AsString := Depto;
...


Responder Citar

10/12/2005

Roger1976

Edilcimar, em primeiro lugar agradeço em ter me respondido... Para melhor entendimento, lá vai o código completo...

procedure TfrmCadUsuarios.btnGravarClick(Sender: TObject);
var
TD : TTransactionDesc;
codigo, depto : string;
begin
inherited;

Codigo := copy(cbbxUnidade.Text, 1, 1);
Unidade := copy(cbbxUnidade.Text, 5, 35);

try
TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;

with dmUsuarios.cdsUsuarios do
begin
dmConexao.sqlConexao.Commit(TD);
FieldByName(´NOME´).AsString := dbedtNome.Text;

FieldByName(´COD_DEPTO´).AsInteger := strtoint(Codigo);
FieldByName(´DEPTO´).AsString := Depto;

FieldByName(´LOGIN´).AsString := dbedtLogin.Text;
FieldByName(´SENHA´).AsString := dbedtSenha.Text;

Execute;

dmConexao.sqlConexao.Commit(TD);
ApplyUpdates(0);
Refresh;

Application.MessageBox(´Usuário cadastrado com sucesso!´, ´Inclusão´,
MB_OK + MB_ICONINFORMATION);

end;
except
on E : Exception do
begin
dmConexao.sqlConexao.Rollback(TD);
ShowMessage(E.Message);
Exit;
end;
end;

end;

Ah, estou utilizando interbase + dbxpress...

Caso encontre algum erro, aponte-me por favor...

Valeu!


Responder Citar

10/12/2005

Roger1976

Desculpe-me, ao invés de unidade é depto... cbbxunidade é cbbxdepto...


Responder Citar

10/12/2005

Roger1976

Edilcimar, já descobri, esqueci do dmConexao.sqlConexao.StratTransaction(TD)...

Kra, perdoe-me, de qualquer forma, valeu pela força, e espero não cometer erros infantis como este....


Responder Citar

10/12/2005

Edilcimar

como disse ibtransaction.starttransactiion é necessário, mas estamos aí para o que precisar e pudermos ajudar


Responder Citar

10/12/2005

Roger1976

... Obrigado mais uma vez pela atenção, e agora surgiu uma dúvida, seria possível ao fazer uma consulta mostrar os dois campos (no caso COD_DEPTO e DEPTO) no mesmo combobox? Ou seja, digitar o código do departamento num tedit e mostrar o resultado (COD_DEPTO e DEPTO) no combobox?


Responder Citar