Fórum Conexão ao Banco de Dados #40678
08/12/2003
0
Amilton/pr
Curtir tópico
+ 0Posts
08/12/2003
Afarias
Defina um SELECT na propriedade SelectSQL do IBDataSet
|Qual componente uso para enxegar as tabelas nos formulários?
O componente q ´mantem´ os dados é o IBDataSet (ou poderia ser IBQuery)... vc pode ligar a ele um DataSource e ligar seus componentes (DBEdit, DBGrid, etc...) ao DataSource.
|Gostaria de usar na forma de TTable, é recomendável?
NUNCA -- não é uma boa prática com bancos de dados C/S
T+
Gostei + 0
08/12/2003
Amilton/pr
E os componentes IbDatabase e IbTransaction são necessários?
Desculpe pela insistência, é que estou usando pela primeira vez . . .
Gostei + 0
08/12/2003
Afarias
|manipulação de dados?
Sim. O IBDataSet mantem os registros de uma consulta SQL (select) em um buffer (inclusive com suporte bi-direcional) e proporciona uma aplicação parecida a um Table
|E os componentes IbDatabase e IbTransaction são necessários?
Sim. O IBDatabase mantem uma conexão com o servidor e a base de dados e o IBTransaction permite q vc controle explicitamente as sua transações (select, update, insert, delete).
|Desculpe pela insistência, é que estou usando pela primeira vez . . .
sem problemas, fórum é pra perguntar, responder, discutir idéias, etc...
T+
Gostei + 0
08/12/2003
Amilton/pr
Gostei + 0
08/12/2003
Afarias
1 - clique com o botào direito do mouse no IBDataSet
2 - selecione o menu DataSet Editor...
3 - no form q aparece, vc verá duas listas
4 - na lista da esquerda (key fields) selecione apenas o(s) campo(s) chave de sua tabela
5 - na lista da direita selecione todos os campos
6 - clique no botão GENERATE SQL
7 - clique Ok (fecha)
pronto, aconcelho também q use a propriedade GeneratorField para designar um generator para um código automático (auto-incremental) caso deseje.
T+
Gostei + 0
08/12/2003
Amilton/pr
Gostei + 0
08/12/2003
Amilton/pr
Gostei + 0
08/12/2003
Afarias
|uma chave de outra tabela(relacionamento) daí como seria esse
|procedimento?
vc pode usar JOINS no SelectSQL, mas lembre-se q apenas 1 tabela pode ser alterada (vc pode alterar mais se usar alguns IBUpdateSQL)...
Vc pode ter campos LOOKUP também...
Vc pode estabelecer relacionamentos mestre-detalhe normalmente com outro IBDataSet... (+/- como faria com Tables)
|Não estão funcionando o Commit e o RollBack, dá a mensagem de
|identificação não declarada
qual o seu código e a mensagem de erro original??
T+
Gostei + 0
08/12/2003
Amilton/pr
procedure TF_Emp.BitBtn3Click(Sender: TObject);
begin
if (dbedit1.text = ´´) or (dbedit3.text = ´´) then
begin
messagedlg(´Campos não estão devidamente preenchidos. Verifique!´,mtinformation, [mbok],0);
dbedit1.clear;
dbedit1.setfocus;
end
else
begin // Datam é o nome do Data Modulo
try
with Datam.tblmun do // tblmun é o Nome do IbDataSet
Datam.IBDatabase1.startTransction; // Não funciona
Datam.IbDataBase1.ApplyUpdates; // tbém não funciona
DAtam.tblMun.Post;
datam.IBTransaction1.CommitRetaining; // Não grava o registro
// Datam.tblmun.active:=true;
// DAtam.tblMun.refresh;
// Datam.tblMun.Commit; {on success, commit the changes};
DAtam.tblMun.prior; // Volto ao inicio para gravar somente 1 registro
DAtam.tblMun.edit; //insert;
dbedit1.setfocus;
except
Datam.IBTransaction1.Rollback; {on failure, undo the changes}; // tbém não funciona
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
end;
end;
Obs- Primeiro código onde tento gravar um registro com Firebird;
Gostei + 0
09/12/2003
Afarias
o StartTransaction é na transação, de forma q vc poderia fazer::
Datam.IBTransaction1.StartTransaction;
ou
Datam.tblmun.Transaction.StartTransaction
como está em um bloco WITH Datam.tblmun DO, vc pode simplesmente::
Transaction.StartTransaction;
|Datam.IbDataBase1.ApplyUpdates
Não há necessidade de usar ApplyUpdates -- A não ser q vc resolva realmente usar ChachedUpdates=True (o q não é bom na mairia dos casos) -- se fosse usar seria no IBDataSet::
Datam.tblmun.ApplyUpdates;
ou, no bloco WITH, simplesmente::
ApplyUpdates;
Mas, como disse não há necessidade - vc não está usando CachedUpdates (suponho) ... basta um POST mesmo.
T+
Gostei + 0
10/12/2003
Amilton/pr
Vou testar dessa forma, no entanto até agora a forma que realmente gravou os dados foi usando AppyUpdates no evento AfterPost do DataSet.
Gostei + 0
10/12/2003
Afarias
O commit serve para encerrar a transação gravando difinitivamente as alterações realizadas, um exemplo::
with IBDataSet do begin Transaction.StartTransaction; try Append; FieldByName(´tal1´).AsInteger := tal1; FieldByName(´tal2´).AsString := tal2; Post; finally Transaction.Commit; end; end;
|Vou testar dessa forma, no entanto até agora a forma que realmente
|gravou os dados foi usando AppyUpdates no evento AfterPost do
|DataSet.
Como disse esqueça o ApplyUpdates. E, se o ApplyUpdates não está dando erro, e a propriedade CachedUpdates = FALSE, então, ATUALIZE JÁ seu IBX, as versões recentes do IBX não deixam isso ocorrer.
T+
Gostei + 0
11/12/2003
Amilton/pr
Gostei + 0
11/12/2003
Afarias
Não... o código mostra um processo ´completo´ com a abertura da transação, Append, definição dos valores dos campos, POST e commit.
não entendi o resto da mensagem...
T+
Gostei + 0
12/12/2003
Amilton/pr
Então quando gravo o registro quero pegar o número do último registro da tabela e mostrar nesse edit para o usuário ver o código do novo cadastro e ao mesmo tempo gravando esse numero na tabela. Gostaria de fazer isso sem o generator, é possível?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)