Gravação Usuário
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
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
Curtidas 0
Respostas
Roger1976
10/12/2005
Ah, eu esqueci, dá a seguinte mensagem de erro qdo clico no gravar:
sqlConexao: There is no active transaction.
sqlConexao: There is no active transaction.
GOSTEI 0
Edilcimar
10/12/2005
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;
...
with dmUsuarios.cdsUsuarios do
begin
...
FieldByName(´COD_DEPTO´).AsInteger := strtoint(Codigo);
FieldByName(´DEPTO´).AsString := Depto;
...
GOSTEI 0
Roger1976
10/12/2005
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!
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!
GOSTEI 0
Roger1976
10/12/2005
Desculpe-me, ao invés de unidade é depto... cbbxunidade é cbbxdepto...
GOSTEI 0
Roger1976
10/12/2005
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....
Kra, perdoe-me, de qualquer forma, valeu pela força, e espero não cometer erros infantis como este....
GOSTEI 0
Edilcimar
10/12/2005
como disse ibtransaction.starttransactiion é necessário, mas estamos aí para o que precisar e pudermos ajudar
GOSTEI 0
Roger1976
10/12/2005
... 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?
GOSTEI 0