DELPHI x MYSQL - QUAL O MÉTODO CORRETO PARA TRABALHAR OS DADOS?
05/08/2016
0
Estou com uma duvida, estava programando em delphi com base Firebird. Até então tudo bem, mas resolvi deixar de usar o firebird e passar a usar o MySQL por que vou fazer um sistema para acesso online e o MySQL tem um suporte melhor para web sem contar a velocidade, então veio o problema.
Com firebird usava os componentes da paleta Interbase, com MySQL passei a usar o nativo DBExpress.
Segue as duvidas.
1 - Qual a forma correta de inserir os dados de uma DBgrid na base? Fiz a ligação usando os componetes TSQLDataSet, DataSet Provider, ClienteDataSet e o DataSource.
Quando vou inserindo os dados na dbgrid assim que passo para segunda linha ele já da um erro de KeyViolation, o que quer dizer q eu violei a chave primaria colocando o mesmo valor. o Que eu queria era Fazer por exemplo uma compra, onde insiro todos os itens da compra na grid e depois posto de uma só vez na base. Como contornar esse problema?
2 - Como obter o valor do autoincremento antes de postar os dados? Na situação de uma Entrada de estoque por exemplo eu tenho a tabela ENTRADA e ITENSENTRADA,
quando eu posto algum item na tabela itens entrada eu preciso saber o valor da ENTRADA para colocar o numero dela na tabela ITENSENTRADA.
Casa
Posts
05/08/2016
Raimundo Pereira
TAB_ENTRADA
ID_ENTRADA= NÃO PODE SER AUTOINC. // Será informados números variados como NF-e, Recibos entre outros.
DATA
Supomos Tabela entrada seja
TAB_ENTRADA_ITENS
COD_PRODUTO
QTD
ID_ENTRADA_ITENS=TAB_ENTRADA.ID_ENTRADA //NÃO PODE SER AUTOINC.
Pois numa NF-e com o mesmo número você tem vários produtos
Espero que ajude
05/08/2016
Casa
Se duas pessoas fizerem um cadastro de cliente ao mesmo tempo vai da erro de chave primaria.
05/08/2016
Raimundo Pereira
2 - Como obter o valor do autoincremento antes de postar os dados? Na situação de uma Entrada de estoque por exemplo eu tenho a tabela ENTRADA e ITENSENTRADA,
quando eu posto algum item na tabela itens entrada eu preciso saber o valor da ENTRADA para colocar o numero dela na tabela ITENSENTRADA.
A questão abaixo já é cadastro de favorecido.
Onde existe N formas de barrar,
Geralmente o cadastro de clientes possui um campo como chave primária
Eu pessoalmente uso o campo DOCUMENTO qual armazena CPF E CNPJ no mesmo campo.
Antes de executar o comando de insert realizo verificações para verificar se o número do documento já existe na tabela
Se duas pessoas fizerem um cadastro de cliente ao mesmo tempo vai da erro de chave primaria.
Você citou dois casos, entrada e cadastro de cliente.
Talvez não tenha compreendido direito o que realmente você está em duvida.
05/08/2016
Casa
Clientes tem numero de documentos únicos que posso usar mas uma entrada de mercadorias? Essas nao tem numeros...nota fiscal? Duas empresas podem emitir o mesmo número de nota...como fazer nesses casos?
05/08/2016
Raimundo Pereira
ID_FORNECEDOR=30
NUMERO_ENTRADA=25
SERIE=0
Em uma nova entrada rodaria um select para verificar se existe no BD.
Sql.text:='select * from entrada where numero_entrada=25 and serie=0 and ID_FORNECEDOR=30
Então você cria a rotina para verificar se a consulta retorna dados caso não retorne você permite a gravação.
05/08/2016
Raimundo Pereira
ID_FORNECEDOR=30
NUMERO_ENTRADA=25
SERIE=0
Em uma nova entrada rodaria um select para verificar se existe no BD.
Sql.text:=''select * from entrada where numero_entrada=25 and serie=0 and ID_FORNECEDOR=30
Então você cria a rotina para verificar se a consulta retorna dados caso não retorne você permite a gravação.
05/08/2016
Casa
05/08/2016
Raimundo Pereira
Esse código a qual você se refere seria no caso o ID_FORNECEDOR ?
05/08/2016
Casa
05/08/2016
Raimundo Pereira
Vou dizer como eu uso.
Tenho uma tabela TMP_VENDAS.
Nela tenho os campos
ID_VENDA auto inc.
FLAG_USADO = char
Meu button nova venda =
Gera um novo ID_VENDA = Resguardo o ID gerado e retornado para o edit, então na minha tabela venda_itens eu tenho também meu ID_VENDA que será informado
todas vez que eu passar um item referente a esta venda.
Se um novo usuário for realizar uma nova venda ele vai automaticamente ter um ID_VENDA diferente do meu
05/08/2016
Casa
Mas eu só consigo ter esse numero depois de postar os dados, eu não queria postar os dados antes pois se o usuário desisite de fazer a venda suja a tabela.
E ainda na minha primeira duvida, como faço pra inserir varias linhas no DBgrid, no caso ITENS_VENDA, ele tem uma chave primaria ID_ITENS_VENDA (Auto_inc). O que acontece é que quando eu coloco a segunda linha ele da erro KEY VIOLATION, configurei o SQLDataSET e o ClienteDataSet, no campo ID_ITENS_VENDA como REQUIRE = False;
05/08/2016
Raimundo Pereira
raimundo.ti
rcp@outlook.com.br
Clique aqui para fazer login e interagir na Comunidade :)