Exemplo básico com IBX!

Firebird

16/12/2003

Para aqueles iniciantes q querem um exemplo como configurar os componentes IBX para acessar uma tabela editar, etc... segue um pequeno e básico exemplo mostrando ´passo-a-passo´ ::


crie um banco de dados com uma tabela com a seguinte estrutura:


create table teste1 (
  codigo      integer not null,
  nome       varchar(30) not null,
  endereco  varchar(60),
  telefone    varchar(15),
  primary key pk_teste1 (codigo)
);

create index ix_teste1_nome on teste1 (nome);




crie um novo projeto no Delphi e coloque no form::

1 panel (Align=alTop, Caption=´´)
1 IBDatabase (DefaultTransaction = IBTransaction1, LoginPrompt = False)
1 IBTransaction (DefaultDatabase=IBDatabase1)
1 IBDataSet (Database=IBDatabase1, Transaction = IBTransaction1)
1 DataSource (DataSet = IBDataSet1)
1 dbGrid (Align=alClient, DataSource=DataSource1)
1 dbNavigator (no Panel -- DataSource = DataSource1)


dê um duplo-clique no IBDAtabase e configure::

database = caminho do banco criado anteriormente

clique na opção REMOTE e configure tb:

server = localhost
protocol = tcp
username = sysdba (ou outro usuário)
password = masterkey (a senha do seu usuário)
character set = o character set q vc criou o banco

clique OK

configure ainda no seu IBDatabase a propriedade AllowStreemedConnected = FALSE


agora, dê um duplo-clique no IBTransaction e selecione a opção READ COMMITED, clique OK

vamos configurar então o IBDataSet

na propriedade SelectSQL coloque seu select, ex::

SELECT * FROM TESTE1
WHERE NOME STARTING WITH :par1

agora, clique com o botão direito do mouse no IBDataSet1 e selecione no menu ´Dataset Editor...´

no editor do IBDataSet, na lista a esquerda (key fields) selecione apenas o campo CODIGO, na lista da direita, selecione todos os campos.

clique no botão GENERATE SQL -- nesse momento, observe os SQLs gerados, eles são um bom exemplo de como devem ser! E vc pode notar (e controlar) tudo q vai ocorrer em cada operação.

Clique OK para fechar o assistente.

Agora, dê um duplo-clique no IBDataSet e adicione o campos persistentes (botão direito e selecione o menu ´Add all fields)

bom, coloque agora no PANEL1 um Botão e um Edit.

limpe a propriedade Text do Edit e...
...no botão coloque o caption = ´pesquisar´ e o código no OnClick::

  IBDataSet1.Close;
  IBDataSet1.Params[0].AsString := Edit1.Text;
  IBDataSet1.Open;


e no evento onCreate do seu Form coloque::

try
  IBDatabase1.Connected := True;
except
  ShowMessage(´não foi possível realizar a conexão com o BD´);
end;


e no OnClose ou OnDestroy do form coloque::

try
  if IBTransaction1.InTransaction then
    IBTransaction1.Commit;
  IBDatabase1.Connected := False;
except
  ShowMessage(´erro de comunicação com o BD´);
end;



coloque mais 2 botões no PANEL1 com os captions COMMIT e ROLLBACK, e coloque os códigos no OnClick (respectivamente)::

IBDataSet1.Transaction.CommitRetaining;

e

IBDataSet1.Transaction.RollbackRetaining;


PRONTO!!!

Execute o programa, clique no botão Pesquisar (não vai haver nada) inclua uns registros... clique no botão COMMIT, e etc... vai usando ele (incluir, editar, excluir, etc... etc...)!



Bom, é isso! Espero q ajude a todos os iniciantes. 8)


T+


Afarias

Afarias

Curtidas 0

Respostas

Sremulador

Sremulador

16/12/2003

[b:7ab7d53b6b]Sabemos que você Afarias e muito entendido em IB/FB, se puder me responder umas perguntinhas por favor.

:?: Pra que serve o AllowStreemedConnected;
:?: Como tratar o dead lock.
:?: O fireBird 1.5 RC8 faz o controle do dead lock.
:?: O Qual seria a melhor configuração para o Fbconfig.

Obrigado.
[/b:7ab7d53b6b]


GOSTEI 0
Afarias

Afarias

16/12/2003

| Pra que serve o AllowStreemedConnected

Vc pode colocar esta propriedade para FALSE (recomendo) para q quando vc compilar seu executável e a propriedade Connected estiver TRUE (por esquecimento por exemplo) -- o IBDatabase não tente conectar-se automaticamente com o banco definido em tempo de projeto quando a aplicação for executada.

Evita muitos problemas de erros quando da distribuição da aplicação.


| Como tratar o dead lock.

1º -- Cuidando bem das transações e mantendo-as curtas.

No mais, com Try/Except


| O fireBird 1.5 RC8 faz o controle do dead lock.

Não entendi... O FB 1.5 permite sim o bloqueio explícito de registros (SELECET FOR UPDATE / WITH LOCK) -- é isso?? -- vc pode dar uma olhada sobre isso nas notas de versão do FB 1.5 -- mas muito cuidado ao usar esta funcionalidade.


| O Qual seria a melhor configuração para o Fbconfig.

??firebird.conf?? A padrão! :D ´cada caso é um caso´ -- não há uma configuração definitiva.


T+


GOSTEI 0
Marbravo

Marbravo

16/12/2003

agora, clique com o botão direito do mouse no IBDataSet1 e selecione no menu ´Dataset Editor...´


Eu uso delphi5 e não achei esse item no menu.

É possivel fazer esse exemplo no delphi5?


GOSTEI 0
Afarias

Afarias

16/12/2003

|Eu uso delphi5 e não achei esse item no menu.
|É possivel fazer esse exemplo no delphi5?

SIM é possível... (aliais, é o Delphi q eu uso)

Atualize seu IBX::

http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102

a última atualização para D5 é a 5.04 ::

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18961


T+


GOSTEI 0
Marshall Mathers

Marshall Mathers

16/12/2003

Esse exemplo funciona com FB 1.5 ??? Usando o IBX? Se sim... me ajude por favor, olhe o meu problema:
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=34152[/url]


GOSTEI 0
Poletto

Poletto

16/12/2003

Para aqueles iniciantes q querem um exemplo como configurar os componentes IBX para acessar uma tabela editar, etc... segue um pequeno e básico exemplo mostrando ´passo-a-passo´ ::


Complementando o q você escreveu. É possível, se for, como faço, a partir do Delphi, através da linha de comando, CRIAR UM BANCO DE DADOS DO ZERO.
Exemplo:
Servidor : severprincipal
Protocolo: TCP
UserName: SYSDBA
Password: masterkey

Quero criar o Banco de Dados chamado BASETOTAL.GDB, porém preciso verificar se ele já não foi criado antes.

Tipo: IF NOT EXISTSDB(´serverprincipal:BASETOTAL.GDB´) THEN
CREATE DATABASE serverprincipal:BASETOTAL.GDB

E continuando...
IF NOT EXISTSTB(´serverprincipal:BASETOTAL.GDB.NOTAS´) THEN
CREATE TABLE serverprincipal.BASETOTAL.GDB.NOTAS (
.............) etc.. etc...

Os comandos acima não existem ainda...
Mas solicito que me ajude nesse sentido. Acredito que outros também se beneficiarão com isso.

Obrigado.


GOSTEI 0
Afarias

Afarias

16/12/2003

|como faço, a partir do Delphi, através da linha de comando, CRIAR UM
|BANCO DE DADOS DO ZERO.

vc pode rodar um script com CREATE DATABASE usando o IBScript por exempo, ou ainda usar um IBDatabase como segue::

with IBDatabase1 do
begin
  SQLDialect := 3;
  DatabaseName := ´severprincipal:caminho\BASETOTAL.GDB´;
  Params.Clear;
  Params.Add(´USER ´´SYSDBA´´´);
  Params.Add(´PASSWORD ´´masterkey´´´);
  Params.Add(´PAGE_SIZE 4096´);
  Params.Add(´DEFAULT CHARACTER SET ISO8859_1´);
  try
    CreateDatabase;
  except
    {tratamento de erro}
  end;
end;



|Tipo: IF NOT EXISTSDB(´serverprincipal:BASETOTAL.GDB´) THEN
|CREATE DATABASE serverprincipal:BASETOTAL.GDB

isso não existe. vc pode simplesmente tentar conectar-se com o banco de dados e capturar a exceção (que será gerada caso o banco não exista)


|IF NOT EXISTSTB(´serverprincipal:BASETOTAL.GDB.NOTAS´) THEN
|CREATE TABLE serverprincipal.BASETOTAL.GDB.NOTAS (

Para criar tabelas e outros objetos do banco de dados, utilize um componente de script, como o IBScript


T+


GOSTEI 0
Poletto

Poletto

16/12/2003

Brigadão....
Valeu Muito....


GOSTEI 0
Maicon Loffi

Maicon Loffi

16/12/2003

Amigo Afarias!

Pra que serve o AllowStreemedConnected

Vc pode colocar esta propriedade para FALSE (recomendo) para q quando vc compilar seu executável e a propriedade Connected estiver TRUE (por esquecimento por exemplo) -- o IBDatabase não tente conectar-se automaticamente com o banco definido em tempo de projeto quando a aplicação for executada.

Coloquei esta propriedade pra false, agora quando executo o sistema, as tabelas que estão no DataModule, e teriam que ficar ativas (True), elas não ficam, tenho que dar uma Active (True) para cada tabela, ou seja, elas ficam fechadas ao entrar no sistema.


GOSTEI 0
Dart

Dart

16/12/2003

Desculpe a minha ignorancia mas não consegui atualixar o comp ibx Da um erro dclib50. alguma coisa o que pode ser. uso Delphi 5

Como instalar?

Valeu


GOSTEI 0
Dart

Dart

16/12/2003

Opa

Não Consigo Atualizar o meu IBX No Delphi 5 da um erro.
e apaga os componentes IBX anteriores.


Como Resolvaer

Valeu

Dart


GOSTEI 0
Mahdak

Mahdak

16/12/2003

tudo bem isso tudo eu ja assimilei, mas tem uma coisinha bem simples que nao sei como fazer...
Criar um banco em tempo de execução apertando no botao do meu programa, se alguem pudesse me ajudar ficarei grato!!!

[]´s :shock:


GOSTEI 0
Afarias

Afarias

16/12/2003

|Pra que serve o AllowStreemedConnected

Para q o valor da propriedade Connected (ajustada em Design Time no Inspector) seja aplicada quando a aplicação for executada.

Em geral, é melhor deixar o AllowStreemedConnected como FALSE e, conectar no banco (e, de tabela abrir as tabelas) via código, ex:

IBDatabase1.Connected := True;
Query1.Open;

etc...


|Não Consigo Atualizar o meu IBX No Delphi 5 da um erro.

Para atualizar o IBX é necessário ter a atualização (Update Pack 1) do Delphi 5 aplicada.


|Criar um banco em tempo de execução apertando no botao do meu
|programa, se alguem pudesse me ajudar ficarei grato!!!

Vc pode usar o método CreateDatabase do IBDatabase::

with IBDatabase1 do
begin
DatabaseName := ´caminho_do_database´;
Params.Add(´USER ´SYSDBA´);
Params.Add(´PASS ´masterkey´);
Params.Add(´PAGE_SIZE 4096´);
Params.Add(´DEFAULT CHARACTER SET ISO8859_1´);
CreateDatabase;
end;



T+


GOSTEI 0
Dart

Dart

16/12/2003

ola

para que serve character set ?


GOSTEI 0
Eliene

Eliene

16/12/2003

|Não Consigo Atualizar o meu IBX No Delphi 5 da um erro.

Para atualizar o IBX é necessário ter a atualização (Update Pack 1) do Delphi 5 aplicada.

:?: Não sei onde posso encontrar este (Update Pack 1). Seria o SP1 citado no download da atualização ? Onde posso encontrá-lo ? Baixei a atualização e rodei a atualização. Os componentes existentes na palheta do Interbase sumiram. Por Favor me ajude...


GOSTEI 0
Afarias

Afarias

16/12/2003

A atualização do Delphi vc encontra no site da Borland (mas é só pra usuários registrados)



T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

16/12/2003

NO PRIMEIRO EXEMPLO DE AFARIAS TEM ALGUM PROBLEMA SE EU USAR COMMIT EM VEZ DE UTILIZAR COMMITRETAINING?


GOSTEI 0
Afarias

Afarias

16/12/2003

|NO PRIMEIRO EXEMPLO DE AFARIAS TEM ALGUM PROBLEMA SE EU
|USAR COMMIT EM VEZ DE UTILIZAR COMMITRETAINING?

Nenhum. Do ponto de vista do banco é até melhor.

Mas tenha em mente q o Commit fecha a transação, fechando assim todos os DataSets ligados a ela.


T+


GOSTEI 0
Xandeamorim

Xandeamorim

16/12/2003

BOM DIA SR. FARIAS GOSTARIA DE SABER O QUE EU TERIA QUE FAZER PARA ESTE EXEMPLO FONCIONAR EM REDE, OBRIGADO PELA AJUDA....


GOSTEI 0
Afarias

Afarias

16/12/2003

mude a configuração::

server = localhost

para

server = ip ou nome do servidor


T+


GOSTEI 0
Xandeamorim

Xandeamorim

16/12/2003

Mas se eu salvo numa maquina para eu poder visualizar na outra maquina vou te que abrir e fechar o IBDataSet.


GOSTEI 0
Gandalf.nho

Gandalf.nho

16/12/2003

Tem que setar a transação como ReadComitted para evitar fazer isso de abrir/fechar o dataset.


GOSTEI 0
Afarias

Afarias

16/12/2003

SEMPRE tem q se re-executar a consulta (fechar/abrir o IBDataSet por exemplo) para poder ver os novos registros do banco.

Configurando a transação para ReadCommited vc apenas assegura q quando realizar este procedimento (executar uma consulta) vc terá como resultado TODOS os registros comitados -- independente do ´status´ da sua transação atual.



T+


GOSTEI 0
Roberto Padilha

Roberto Padilha

16/12/2003

O exemplo sobre ibx poderia ser usado, mutatis mutandi, para o DbExpress? Estou desenvolvendo um aplicativo que utiliza o banco Firebird 1.5 e a paleta DbExpress. Já consegui executar com sucesso as funções de incluir, excluir, deletar e alterar uma determinada tabela (Aluno), mediante o uso do código do aluno, que é a chave primária, para identificar o registro. Estou em dificuldade para preparar uma pesquisa que permita ao usuário procurar o aluno pelo nome, mediante a digitação de letras iniciais de modo a selecionar os alunos cujos nomes começassem com aquelas letras. A pesquisa seria programada no evento on change de um edit, por exemplo. Algo como

Select * from Aluno
where nome starting with :par1

A sintaxe acima (semelhante à do seu exemplo) poderia ser usada no Command Text do ClientDataSet ou de um SimpleDataSet, por exemplo?
Agradeço antecipadamente sua costumeira boa vontade e presteza em auxiliar.
[]s


GOSTEI 0
Afarias

Afarias

16/12/2003

|A sintaxe acima (semelhante à do seu exemplo) poderia ser usada no
|Command Text do ClientDataSet ou de um SimpleDataSet, por
|exemplo?

1) poderia ficar no SQLQuery ou SQLDataSet

2) poderia ficar no Command Text do ClientDataSet sem problemas, mas é preferencial q fique no SQLQuery associado. E o ClientDataSet seja utilizado para definir o parâmetro (par1)

3) SimpleDataSet acredito não ser 1 bom componente para ser usado


T+


GOSTEI 0
Roberto Padilha

Roberto Padilha

16/12/2003

Prezado AFarias
Quando o usuário conhece e se lembra do nr. do aluno (que é a chave primária da tabela aluno), pode realizar alterações e exclusões na tabela, a partir desse nr. (Isto já está pronto e funcionando). Porém acho conveniente oferecer ao usuário fazer uma pesquisa pelo nome, selecionando alguns poucos alunos cujo nome começasse, por exemplo, por Jo (Joâo, José...). O resultado desta pesquisa apareceria em um DbGrid que o usuário usaria para selecionar um aluno. Confesso que não estou sabendo escolher os componentes adequados para por em prática essa pesquisa. Já fiz isso uma vez, funcionou bem, mas era com Paradox, onde o TQuery e o DbGrid combinam (não são unidirecionais). Será que existe algum artigo ou apostila que possa ajudar a entender melhor o funcionamento desses componentes e, principalmente, como interagem entre si?
Em sua mensagem anterior, você me informa que o SimpleDataSet não é um bom componente. Poderia explicar-me por que? Posso usar um SQLQuery e mostrar o result set da pesquisa diretamente no DbGrid?
Mais uma vez, muito obrigado pela ajuda.
[]s


GOSTEI 0
Afarias

Afarias

16/12/2003

|Confesso que não estou sabendo escolher os componentes adequados
|para por em prática essa pesquisa. Já fiz isso uma vez, funcionou bem,
|mas era com Paradox, onde o TQuery e o DbGrid combinam (não são
|unidirecionais).

Se vc deseja esse tipo de operação com DBExpress deverá utilizar ClientDataSets/DataSetProviders junto com seus SQLDataSet ou SQLQuery


|Será que existe algum artigo ou apostila que possa ajudar a entender
|melhor o funcionamento desses componentes e, principalmente, como
|interagem entre si?

Acho q sim. Procure material sobre ClientDataSet, DBExpress e DataSnap (MIDAS) no site da Revista Clube Delphi -- Tb existem muita coisa sobre o assunto no fórum Delphi e na própria revista Clube Delphi


|Em sua mensagem anterior, você me informa que o SimpleDataSet não
|é um bom componente. Poderia explicar-me por que?

componentes como SimpleDataSet foram descontinuados.

o SimpleDataSet nada mais é que 1::

SQLDataSet + DataSetProvider + ClientDataSet

é possível q vc possa usá-lo sem se preocupar (principalmente se seu sistema é simples e pequeno) -- ele tras praticidade, mas essa pratacidade tem contra-pontos.


|Posso usar um SQLQuery e mostrar o result set da pesquisa diretamente
|no DbGrid?

Não. Neste caso vc deverá ´montar´ manualmente os resultados na tela com um StringGrid, ListView ou outro componente.

Ou então usar um ClientDataSet associado ao SQLQuery como citei, ai vc pode ligar o DBGrid ao ClientDataSet.

(ou apenas usar o SimpleDataSet se desejar)


T+


GOSTEI 0
Roberto Padilha

Roberto Padilha

16/12/2003

|Posso usar um SQLQuery e mostrar o result set da pesquisa diretamente
|no DbGrid?

Não. Neste caso vc deverá ´montar´ manualmente os resultados na tela com um StringGrid, ListView ou outro componente.

Ou então usar um ClientDataSet associado ao SQLQuery como citei, ai vc pode ligar o DBGrid ao ClientDataSet.


Optei pela primeira alternativa mas está ocorrendo uma dificuldade. Quando tento passar os valores da consulta (SQLQuery) para o StringGrid, o programa é interrompido com uma mensagem de erro ´Cursor Unknown´. A primeira parte (a consulta) realiza-se sem erro.
Seguem abaixo listagens das partes que interessam, do programa, para o caso de você poder dar uma olhada e descobrir o erro. às vezes penso que, por ser um programa freeware, o FireBird é mais sujeito a ´bugs´ e existe a possibilidade de que seja um deles o causador.


procedure TF_PesqAluno.EditLetrasChange(Sender: TObject);
var Consulta: string;
begin
Consulta := ´Select COD_ALUNO, NOME, CPF, IDENTIDADE from Aluno ´
+´where NOME starting with ´´´
+EditLetras.Text + ´´´´;
try
transac.TransactionID := 1;
transac.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transac);
with DM.SQLQry_Aluno do
begin
Close;
SQL.Clear;
SQL.Append(Consulta);
Open;
end;
DM.SQLConnection1.Commit(Transac);
except
on Exc:Exception do
begin
ShowMessage(´Erro na procura por nome. ´+Exc.Message);
DM.SQLConnection1.Rollback(Transac);
end;
end;
MostraGrade;
end;



procedure TF_PesqAluno.MostraGrade;
var i,j: word;
begin
with DM.SQLQry_Aluno do
begin
if Eof then exit;
First;
j := 1;
while not Eof do
begin
with StrGr_Alunos do
begin
cells[0,j] := FieldByName(´COD_ALUNO´).AsString;
cells[1,j] := FieldByName(´NOME´).AsString;
cells[2,j] := FieldByName(´IDENTIDADE´).AsString;
cells[3,j] := FieldByName(´CPF´).AsString;
end;
inc(j);
next;
end;
end;
end;


Agradeço a atenção.
[]s


GOSTEI 0
Roberto Padilha

Roberto Padilha

16/12/2003

Consegui resolver o problema, após muito esforço. Estas ´brigas´ com a máquina trazem como benefício melhorar nosso conhecimento da ferramenta. Como a experiência pode ser útil para alguns companheiros, aqui vai o resumo do acontecido (banco Firebird): após iniciar uma transação utilizando o SQLQuery (ver listagem na msg anterior), tentava transmitir os valores dos campos do result set obtido para os campos respectivos de um StringGrid. Porém havia sempre um erro descrito como ´unknown cursor´. Por que? porque eu colocava o comando commit da transação antes da rotina de transferência dos dados. Aprendi então que, após o commit, o result set gerado já não está mais disponível. Ou seja, uma transação começa com o starttransaction e termina com um commit ou com um rollback. Depois de terminada, os registros envolvidos não estão mais disponíveis. Agora parece simples, verdadeiro ovo de Colombo, mas deu para queimar bastante massa cinzenta.
Obrigado a todos que me ajudaram, em especial ao AFarias.
[]s


GOSTEI 0
Shaolin

Shaolin

16/12/2003

configure ainda no seu IBDatabase a propriedade AllowStreemedConnected = FALSE vamos configurar então o IBDataSet agora, clique com o botão direito do mouse no IBDataSet1 e selecione no menu ´Dataset Editor...´


Não tenho nenhuma destas duas Opções !!!


GOSTEI 0
Gandalf.nho

Gandalf.nho

16/12/2003

Shaolin, atualize seu IBX, pegue a última versão em [url]http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102[/url]


GOSTEI 0
Baker

Baker

16/12/2003

Olá bom dia a todos.

Uso o componente IBX, eu já sabia usa-lo mas encontrava dificuldade na conexão com o bando de dados do servidor para o cliente. Tentei seguir o exemplo do AFarias, e então deu a mesma mensagem de erro.
Olhem só a configuração do Ibdataset:

server = 192.168.0.1 //que seria no caso o ip da maquina servidor.
protocol = TCP
database = c\programas\meuprograma\db.gdb //pasta compartilhada
user = SYSDBA
password = masterkey

assim clico no botão de TEST e ele me retorna o seguinte erro:

ERRO: ´I/O error for file ´c\programas\meuprograma\db.gdb´
Error while trying to open file
O sistema não pode encontrar o arquivo especificado.´

Já fiz de tudo para tentar me conectar ao bando de dados do servidor, desde configurações via programação, desinstalação de firewalls ou algo do tipo, eu usava o interbase mas desinstalei e instalei o firebird que deu no mesmo... Cansei de chingar o computador...rs* (brincadeiras a parte).

Seria alguma configuração extra em alguma dll, ou estah faltando alguma dll para reconhecer o bendito arquivo.

Ah, também estou usando nas duas maquinas o WinXP...

Bom agradeço a todos pela atenção.

Até mais

Bruno Baker - Programador SinteSoft


GOSTEI 0
Vinicius2k

Vinicius2k

16/12/2003

Bruno,

Esta questão sempre gera alguma ´confusão´... O problema está no caminho do banco, informe :
[b:edf496b103]c:\programas\meuprograma\db.gdb[/b:edf496b103]

Vc deve informar o caminho FISICO REAL do banco NO SERVIDOR e não compartilhamento. Aliás, não é necessário efetuar o compartilhamento e também não é recomendável por questões de segurança.

Encare a informação do caminho do banco de dados como a passagem de um parametro para o servidor IB/FB e não necessariamente vc precisa ter acesso a este arquivo informado através da rede.

Este caminho que vc informa será levado ao serviço gds_db para que o servidor saiba a qual banco de dados vc deseja se conectar, compreende?

T+


GOSTEI 0
Baker

Baker

16/12/2003

Muitissimo obrigado Vinicius2K

A minha aplicação rodou perfeitamente. Valew mesmo você me poupou meses de dor de cabeça..rs...

Fico Grato valew
e até mais

-------------------------------------------------------------------------------------
Bruno Baker - Programador SinteSoft
[url]www.sintesoft.com[/url]


GOSTEI 0
Anderson_blumenau

Anderson_blumenau

16/12/2003

eu estou com dificuldade pra criar os comandos DML, sera que alguma podia postar o codigo dos botoes salvar,novo,editar,atualizar,deletar

procedure TFrm_Empresa.BtNovoClick(Sender: TObject);
begin
  Emp_trans.Active;
  Emp_DataSet.insert
end;


o codigo acima gera o seguinte erro CANNOT MODIFY A READ-ONLY DATASET

Porem eu nao vi nenhuma propriedade somente leitura no componente


GOSTEI 0
Afarias

Afarias

16/12/2003

Para poder usar um Insert/Append a propriedade InsertSQL tem q estar preenchida, e para poder usar um Edit a propriedade ModifySQL tem q estar preenchida e para usar um Delete a propriedade DeleteSQL tem q estar preenchida.

Quando estas propriedades (InsertSQL, ModifySQL e DeleteSQL) não estão preenchidas, o DataSet é ReadOnly


T+


GOSTEI 0
Ksotte

Ksotte

16/12/2003

Prezado aFarias,

Como assim ´as propriedades InsertSql, ModifySql, etc...´ tem que estar preenchidas ???
Se eu colocar um form (com os devidos campos) ligados dessa forma:
IBDatabase
IBTransaction
IBDataSet
DataSource

quando for inserir dados fizer -->> ibdataset.insert
quando for salvar dados fizer -->> ibdataset.post
quando for editar dados fizer -->> ibdataset.edit

não dá certo ????

Desculpem pela ignorância .. mas sou iniciante...rs..

Abraço


GOSTEI 0
Analyst

Analyst

16/12/2003

A/C AFARIAS ou alguem do forum

Pessoal, tenho uma tabela no firebird 2.1 com um campo numerico(10,2), To testando esse banco de dados, tentando me aprimorar, mas surgiu um probleminha, ao rodar o meu programa que esta ligado a base pela engine BDE - TDatabase e TTable, DbNavigator e uns DBEdit, lembrando que a tabela já está peenchida com valores, mas ao navegar entre esses registros pelo programa, no lugar de aparecer por exemplo no campo valor da venda 10,50 está aparecendo a palavra (BYTES)...porque isso ocorre com o firebird, o que tenho que fazer para mostrar o valor?

Valeu pessoal!!!

Alessandro


GOSTEI 0
POSTAR