Problema com SQL, DBGrid e DBText
Ola amigos,
Primeiro uso paradox e delphi5
Fiz um programa num form aonde tenho 4 querys query1 para cadastrar, query2 para somar valores query3 para somar despesa e query4 para mostrar num dbgrid
bom a query1 o datasource esta ligada em outro form (form3.datasource2)
na SQL da query1 esta assim
select * from tbsalario
where codfunc=:codfunc
nas outras querys o datasource estao ligadas na datasource da query1 e o codigo SQL esta assim
query2
select sum (valor) from tbsalario
where codfunc=:codfunc
query3
select sum(desconto) from tbsalario
where codfunc=:codfunc
query4
select * from tbsalario
where codfunc=:codfunc
order by codigo
Isso serve pra quando eu digitar o codigo do funcionario o form pegar somente os valores do funcionario selecionado. (Obs: nao uso chave primaria para esse tipo de ligaçao)
O problema eh que na dbgrid aonde esta a query4 nao aparece o que esta gravado antes de ser confirmada a operaçao tipo dar um post num botao, e assim tambem a query2 e query3 ficam em branco ate confirmar pra depois sim aparecer na dbgrid e dbtext os valores digitados, e se eu tiver que fazer um novo lançamento novamente ficam em branco.
Com fazer pra resolver esse problema, sem precisar fazer chave primaria, pois nao curto essa de chave primaria da muito problema.
Agradeço quem puder me ajudar
Obrigado
Adriano...
Primeiro uso paradox e delphi5
Fiz um programa num form aonde tenho 4 querys query1 para cadastrar, query2 para somar valores query3 para somar despesa e query4 para mostrar num dbgrid
bom a query1 o datasource esta ligada em outro form (form3.datasource2)
na SQL da query1 esta assim
select * from tbsalario
where codfunc=:codfunc
nas outras querys o datasource estao ligadas na datasource da query1 e o codigo SQL esta assim
query2
select sum (valor) from tbsalario
where codfunc=:codfunc
query3
select sum(desconto) from tbsalario
where codfunc=:codfunc
query4
select * from tbsalario
where codfunc=:codfunc
order by codigo
Isso serve pra quando eu digitar o codigo do funcionario o form pegar somente os valores do funcionario selecionado. (Obs: nao uso chave primaria para esse tipo de ligaçao)
O problema eh que na dbgrid aonde esta a query4 nao aparece o que esta gravado antes de ser confirmada a operaçao tipo dar um post num botao, e assim tambem a query2 e query3 ficam em branco ate confirmar pra depois sim aparecer na dbgrid e dbtext os valores digitados, e se eu tiver que fazer um novo lançamento novamente ficam em branco.
Com fazer pra resolver esse problema, sem precisar fazer chave primaria, pois nao curto essa de chave primaria da muito problema.
Agradeço quem puder me ajudar
Obrigado
Adriano...
Adriano_servitec
Curtidas 0
Respostas
Daemon
19/07/2005
...o lance eh o seguinte, como você está fazendo o relacionamento das Query´s através de parametro, ou seja, [i:589709da33]where codfunc=[b:589709da33]:codfunc[/b:589709da33] [/i:589709da33]
acontece que enquanto você não salva no banco o registro do qry1, o cursor está posicionado em um registro em branco e por consequencia, as outras querys estão posicionadas no ponto a que ele se refere, ou seja, vazio, o lance seria você trocar a forma como esse relacionamento é feito. ....mas qual seria, no caso a necessidade de você ver o que está na Qry2, Qry3 e 4 enquanto está inserindo na Qry principal??
acontece que enquanto você não salva no banco o registro do qry1, o cursor está posicionado em um registro em branco e por consequencia, as outras querys estão posicionadas no ponto a que ele se refere, ou seja, vazio, o lance seria você trocar a forma como esse relacionamento é feito. ....mas qual seria, no caso a necessidade de você ver o que está na Qry2, Qry3 e 4 enquanto está inserindo na Qry principal??
GOSTEI 0
Adriano_servitec
19/07/2005
valeu amigo,
Agora entendi como fazer, nao vi que quando dava um append abria um campo em branco no dbgrid, entao fiz assim quando da um append ja mando um edit com o codfunc e logo um post, assim ele fica gravado antes de terminar o lançamento.
Obrigado
T+
Agora entendi como fazer, nao vi que quando dava um append abria um campo em branco no dbgrid, entao fiz assim quando da um append ja mando um edit com o codfunc e logo um post, assim ele fica gravado antes de terminar o lançamento.
Obrigado
T+
GOSTEI 0
Rjun
19/07/2005
[quote=´Adriano_Servitec´]Ola amigos,
Com fazer pra resolver esse problema, sem precisar fazer chave primaria, pois nao curto essa de chave primaria da muito problema.
Tudo bem, cada um trabalha como quer, mas o básico em estrutura de dados é utilizar chave primária. Como que você faz para controlar que não se repita o código?
Com Paradox eu prefiro utilizar TTable. Você pode criar índices para ordenar seus registros sem que esses indices sejam chaves primárias. Com isso, você não precisar criar esse monte de query.
Com fazer pra resolver esse problema, sem precisar fazer chave primaria, pois nao curto essa de chave primaria da muito problema.
Tudo bem, cada um trabalha como quer, mas o básico em estrutura de dados é utilizar chave primária. Como que você faz para controlar que não se repita o código?
Com Paradox eu prefiro utilizar TTable. Você pode criar índices para ordenar seus registros sem que esses indices sejam chaves primárias. Com isso, você não precisar criar esse monte de query.
GOSTEI 0
Adriano_servitec
19/07/2005
Ola RJun
Usei muto a TTable mais acontece que precisava criar chave primaria e arquivos indexados dava muito problema na hora de instalar em outra maquina, as vezes tinha que remolver os arquivos indexados para resolver algum problema com o BD, entao resolvi mudar para query e SQL achei mais interessante e bem mais completo, em questao de de controlar para nao repetir o codigo uso o locate fazendo uma checagem se o codigo ja esta cadastrado.
Bom eu acho que pra mim melhorou dessa forma, nao tenho mais vontade de criar chave primaria.
Blz
T+ amigo
Usei muto a TTable mais acontece que precisava criar chave primaria e arquivos indexados dava muito problema na hora de instalar em outra maquina, as vezes tinha que remolver os arquivos indexados para resolver algum problema com o BD, entao resolvi mudar para query e SQL achei mais interessante e bem mais completo, em questao de de controlar para nao repetir o codigo uso o locate fazendo uma checagem se o codigo ja esta cadastrado.
Bom eu acho que pra mim melhorou dessa forma, nao tenho mais vontade de criar chave primaria.
Blz
T+ amigo
GOSTEI 0
Rjun
19/07/2005
Uma sugestão pra você que esta utilizando Paradox. Utilize Access como banco de dados. Você pode usar as queries como num Banco de Dados de verdade. Além de poder utilizar ADO.
GOSTEI 0
Adriano_servitec
19/07/2005
Sugestao aceita amigo,
Mais como fazer?
Uso o database desktop para criar a tabela e ligo ela no ADO access? ou crio a tabela dentro do access?
Estou disposto, mais ai nao utilizarei mais o BDE?
Se vc me der uma pequena dica como fazer eu aceito pq nunca utilizer nada que nao seja tabela paradox e BDE
Valeu
T+
Mais como fazer?
Uso o database desktop para criar a tabela e ligo ela no ADO access? ou crio a tabela dentro do access?
Estou disposto, mais ai nao utilizarei mais o BDE?
Se vc me der uma pequena dica como fazer eu aceito pq nunca utilizer nada que nao seja tabela paradox e BDE
Valeu
T+
GOSTEI 0
Rjun
19/07/2005
Você cria as tabelas no access. No Delphi você utiliza os componentes da palheta ADO.
ADOConnection para montar a conexão com o banco que você criou no access.
ADOQuery para você acessar as tabelas. Nela você pode usar order by, fazer joins.
BDE, esqueça. Qualquer máquina com Windows terá o MDAC instalado.
Para fazer a conexão no ADOConnection, coloque ele no DataModule. Dê um duplo clique. Irá abrir a janela de configuração. Clique no botão build, selecione o provider Microsoft Jet. Clique em avançar e aponte para o banco que você criou no access.
Pronto, agora e só apontar a propriedade connection de suas ADOquery´s para o connection que você criou.
Qualquer dúvida é só postar.
ADOConnection para montar a conexão com o banco que você criou no access.
ADOQuery para você acessar as tabelas. Nela você pode usar order by, fazer joins.
BDE, esqueça. Qualquer máquina com Windows terá o MDAC instalado.
Para fazer a conexão no ADOConnection, coloque ele no DataModule. Dê um duplo clique. Irá abrir a janela de configuração. Clique no botão build, selecione o provider Microsoft Jet. Clique em avançar e aponte para o banco que você criou no access.
Pronto, agora e só apontar a propriedade connection de suas ADOquery´s para o connection que você criou.
Qualquer dúvida é só postar.
GOSTEI 0
Adriano_servitec
19/07/2005
So uma duvidazinha amigo.
Eu abro o MicroSoft Access e crio um novo banco de dados?
Se for como fazer, desculpe nunca usei o access.
Eu abro o MicroSoft Access e crio um novo banco de dados?
Se for como fazer, desculpe nunca usei o access.
GOSTEI 0
Rjun
19/07/2005
Sim, você abre o access, clica em novo e cria um novo banco de dados. Ai você pode criar as tabelas.
GOSTEI 0
Adriano_servitec
19/07/2005
Ok vou tentar entao amigo
qualquer coisa posto ai
mais antes so uma pergunta
no paradox uma tabela tipo tbsalario fiz assim
codfunc N
codigo N
descricao A 50
ref a 10
valor $
desconto $
E no access como ficaria?
Outra pergunta, muita gente fala que o paradox nao aguenta muitos dados ele começa a fica lento e as fezes ate travar por falta de capacidade, no access posso incluir supomos uns 50.000 cadastros ou mais?
qualquer coisa posto ai
mais antes so uma pergunta
no paradox uma tabela tipo tbsalario fiz assim
codfunc N
codigo N
descricao A 50
ref a 10
valor $
desconto $
E no access como ficaria?
Outra pergunta, muita gente fala que o paradox nao aguenta muitos dados ele começa a fica lento e as fezes ate travar por falta de capacidade, no access posso incluir supomos uns 50.000 cadastros ou mais?
GOSTEI 0
Rjun
19/07/2005
Eu to sem Access aqui, mas acho que ficaria a mesma coisa ou algo parecido com isso.
codfunc Numerico
codigo Numerico
descricao char 50
ref char 10
valor monetário
desconto monetário
Tenho um cliente que possui tabelas com mais de 200000 registros e nunca reclamou.
codfunc Numerico
codigo Numerico
descricao char 50
ref char 10
valor monetário
desconto monetário
Tenho um cliente que possui tabelas com mais de 200000 registros e nunca reclamou.
GOSTEI 0
Host
19/07/2005
Cuidado com o tamanho do banco de dados e numero de usuarios .... seria bom q a base de dados ñ ultrapasse os 500 mb , e q ñ tivesse + que dez usuarios ... pois a performance cairia drasticamente .... outro detalhe é que vc pode compactar a base de dados de vez em qunado pelo ms access, e mais um probleminha... quando vc pesquisa em sql pelo access em sql, embora selecione os campos ele trara a tupla inteira, fato decorrente de ele ñ ser um SGDB. Mas entre paradox e Access , ainda fico com access.... ahh... se vc esta acustumado a ultilizar o dbexplores para testes com o bde, pesquisa em sql, te dou uma dica, nas pesquisas com data ñ ultiliza ´00/00/00´ ultiliza #00/00/00, que ira funcionar, e sempre atualize o MDAC, isto sim é importante.
GOSTEI 0
Adriano_servitec
19/07/2005
Obrigado tambem pela dica Host
Rogerio nao consegui ativar o ADOQuery, pede uma senha
Q esta errado?
Criei uma tabelinha para fazer um teste, mais nao consigo conectar
Rogerio nao consegui ativar o ADOQuery, pede uma senha
Q esta errado?
Criei uma tabelinha para fazer um teste, mais nao consigo conectar
GOSTEI 0
Rjun
19/07/2005
No ADOConnection, coloque a propriedade LoginPrompt como false.
GOSTEI 0
Adriano_servitec
19/07/2005
Ola amigo, fiz isso, mais quando vou colocar o active com true aparece uma mensagem: erro nao especificado
Sera que eh pq no meu micro nao esta funcionando corretamente o office?
Sera que eh pq no meu micro nao esta funcionando corretamente o office?
GOSTEI 0
Rjun
19/07/2005
Onde você definiu Active = true? Não deve ser problema com o office, pq vc so precisa do banco criado pelo access. Não é necessário ter o office instalado na máquina em que o sistema vai rodar.
GOSTEI 0
Adriano_servitec
19/07/2005
Olha eu coloquei um ADOConnection1
e o caminho eh esse na propriedade connectionstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\wfolha\dados\tbsalario.mdb;Persist Security Info=False
e o loginprompt = false
na ADOQuery liguei na propriedade connection o ADOConection1
ai nao consigo que o active fique true
Outra coisa, se eu tiver que ligar um dbgrid como faço ligo o ADOQuery com um datasource?
e o caminho eh esse na propriedade connectionstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\wfolha\dados\tbsalario.mdb;Persist Security Info=False
e o loginprompt = false
na ADOQuery liguei na propriedade connection o ADOConection1
ai nao consigo que o active fique true
Outra coisa, se eu tiver que ligar um dbgrid como faço ligo o ADOQuery com um datasource?
GOSTEI 0
Rjun
19/07/2005
Bom, pra você ligar no DBGrid é como se fosse com o BDE. Liga uma DataSource na Query.
Bom, aparentemente está tudo ok...você colocou o código SQL na query? Se sim, poste o código.
Bom, aparentemente está tudo ok...você colocou o código SQL na query? Se sim, poste o código.
GOSTEI 0
Adriano_servitec
19/07/2005
Coloquei um codigo simples somente para teste
select * from tbsalario
tambem tentei com o ADOTable e nao funcionou insiste em aparecer essa mensagem: erro nao especificado
select * from tbsalario
tambem tentei com o ADOTable e nao funcionou insiste em aparecer essa mensagem: erro nao especificado
GOSTEI 0
Rjun
19/07/2005
Que windows você esta usando? Estou pesquisando para ver se encontro algo a respeito...salve seu projeto, feche o delphi e abra de novo...veja se o erro persiste.
GOSTEI 0
Adriano_servitec
19/07/2005
Ola amigo, fiz o mesmo procedimento em outra maquina e o problema esta nessa maquina que trabalho.
No outro micro funcionou perfeitamente, so deu um problema de chave primaria, mais coisinha que acho que foi na hora em que fiz a tabela.
Bom como eu disse estou com problema no office, e deve ser isso que esta afetando meu micro, mai ja vi que da pra criar tabela e fazer as inclusoes com access.
Mais pra frente quando arrumar meu micro, volto a falar com vc sobre o access por enquanto amigo vou deixar assim ate saber o que esta acontecendo, pois nem tentando instalar o CD do Office novamente nao consigo, pois aparece uma mensagem na hora de instalar. ERRO 1324 O CAMINHO DA PASTA ´TEMPC´ CONTEM CARACTERES INVALIDOS
Blz
T+
E Obrigado pela dica e ajuda amigo
No outro micro funcionou perfeitamente, so deu um problema de chave primaria, mais coisinha que acho que foi na hora em que fiz a tabela.
Bom como eu disse estou com problema no office, e deve ser isso que esta afetando meu micro, mai ja vi que da pra criar tabela e fazer as inclusoes com access.
Mais pra frente quando arrumar meu micro, volto a falar com vc sobre o access por enquanto amigo vou deixar assim ate saber o que esta acontecendo, pois nem tentando instalar o CD do Office novamente nao consigo, pois aparece uma mensagem na hora de instalar. ERRO 1324 O CAMINHO DA PASTA ´TEMPC´ CONTEM CARACTERES INVALIDOS
Blz
T+
E Obrigado pela dica e ajuda amigo
GOSTEI 0
Rjun
19/07/2005
Talvez seja algum problema com o windows. Como disse, a máquina que vai rodar a aplicação não precisa do Access e nem do Office instalados. A única coisa que precisa é do MDAC que ja vem com o Windows. O ideal é sempre mante-lo atualizado.
Qualquer problema é só postar.
Qualquer problema é só postar.
GOSTEI 0
Adriano_servitec
19/07/2005
A maquina que funcionou eh windows 98, a minha maquina eh windows XP
Vou tentar entao fechar meu computador e ligar ele novamente, pra ver se funciona
Vou tentar entao fechar meu computador e ligar ele novamente, pra ver se funciona
GOSTEI 0