Problema com SQL, DBGrid e DBText

Delphi

19/07/2005

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...


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Daemon

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??


GOSTEI 0
Adriano_servitec

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+


GOSTEI 0
Rjun

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.


GOSTEI 0
Adriano_servitec

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


GOSTEI 0
Rjun

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

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+


GOSTEI 0
Rjun

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.


GOSTEI 0
Adriano_servitec

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.


GOSTEI 0
Rjun

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

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?


GOSTEI 0
Rjun

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.


GOSTEI 0
Host

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

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


GOSTEI 0
Rjun

Rjun

19/07/2005

No ADOConnection, coloque a propriedade LoginPrompt como false.


GOSTEI 0
Adriano_servitec

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?


GOSTEI 0
Rjun

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

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?


GOSTEI 0
Rjun

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.


GOSTEI 0
Adriano_servitec

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


GOSTEI 0
Rjun

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

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


GOSTEI 0
Rjun

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.


GOSTEI 0
Adriano_servitec

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


GOSTEI 0
POSTAR