Erro em Inserção/Atualização de registro usando ClientDataSet
Boa tarde pessoal!
Estou com um problema que já está me tirando do sério, já fiz várias pesquisas e até agora não consegui achar a bendita solução. Vou tentar explicar aqui o cenário do problema.
Estou usando o componente ZQuery(Zeos Component) + DataSetProvider + ClientDataSet em Delphi 7, Windows XP e usando SQL Server 2000. Tenho um formulário só responsável tanto pela consulta como pela manutenção dos dados (Inserção, Exclusao, Alteração), no caso é um cadastro simples de Vendedores, no qual usa as seguintes tabelas:
Vendedores: Codigo(chave Primária), CodUsu(chave Estrangeira), PerCom(percentual de Comissão), LimDesc(Limite de Desconto);
Usuarios: CodUsu(Chave Primária), NomUsu;
Faço a seguinte consulta usando o CommandText do ClientDataSet:
Select Codigo, V.CodUsu, NomUsu, PerCOM, LimDESC From Vendedores V
Inner Join Usuarios U ON U.CodUsu = V.CodUsu
Dessa forma faço com que o usuário consiga consultar pelo Nome do Usuário, até aí tudo bem.
Possuo os seguintes Fields configurados tanto em meu ClientDataSet, como na ZQuery:
Codigo
ProviderFlags: pfUpdate, pfWhere, pfKey
CodUsu
ProviderFlags: pfUpdate, pfWhere
NomUsu
ProviderFlags: []
PerCom
ProviderFlags: pfUpdate, pfWhere
LimDesc
ProviderFlags: pfUpdate, pfWhere
Usuario (Campo Lookup ligado a tabela Usuarios, com KeyFiels: CodUsu da tabela Vendedor, LookupKeyFields: CodUsu da tabela Usuarios, LookupResultFields: NomUsu da tabela Usuarios para o cadastro do Vendedor)
ProviderFlags: []
Tenho o DataSetProvider com a configuração UpdateMode setada para upWhereKeyOnly e no evento OnGetTableName passo o Nome da tabela, no caso Vendedores.
Consigo gravar apenas o primeiro registro na tabela Vendedores, quando tento Alterar o mesmo, ou então, Inserir outro registro, obtenho a seguinte mensagem de erro: "Cannot update a complex query with more then one table".
Já tentei muitas coisas, até agora nada consegui, se alguem puder me ajudar, desde já muito obrigado!
Estou com um problema que já está me tirando do sério, já fiz várias pesquisas e até agora não consegui achar a bendita solução. Vou tentar explicar aqui o cenário do problema.
Estou usando o componente ZQuery(Zeos Component) + DataSetProvider + ClientDataSet em Delphi 7, Windows XP e usando SQL Server 2000. Tenho um formulário só responsável tanto pela consulta como pela manutenção dos dados (Inserção, Exclusao, Alteração), no caso é um cadastro simples de Vendedores, no qual usa as seguintes tabelas:
Vendedores: Codigo(chave Primária), CodUsu(chave Estrangeira), PerCom(percentual de Comissão), LimDesc(Limite de Desconto);
Usuarios: CodUsu(Chave Primária), NomUsu;
Faço a seguinte consulta usando o CommandText do ClientDataSet:
Select Codigo, V.CodUsu, NomUsu, PerCOM, LimDESC From Vendedores V
Inner Join Usuarios U ON U.CodUsu = V.CodUsu
Dessa forma faço com que o usuário consiga consultar pelo Nome do Usuário, até aí tudo bem.
Possuo os seguintes Fields configurados tanto em meu ClientDataSet, como na ZQuery:
Codigo
ProviderFlags: pfUpdate, pfWhere, pfKey
CodUsu
ProviderFlags: pfUpdate, pfWhere
NomUsu
ProviderFlags: []
PerCom
ProviderFlags: pfUpdate, pfWhere
LimDesc
ProviderFlags: pfUpdate, pfWhere
Usuario (Campo Lookup ligado a tabela Usuarios, com KeyFiels: CodUsu da tabela Vendedor, LookupKeyFields: CodUsu da tabela Usuarios, LookupResultFields: NomUsu da tabela Usuarios para o cadastro do Vendedor)
ProviderFlags: []
Tenho o DataSetProvider com a configuração UpdateMode setada para upWhereKeyOnly e no evento OnGetTableName passo o Nome da tabela, no caso Vendedores.
Consigo gravar apenas o primeiro registro na tabela Vendedores, quando tento Alterar o mesmo, ou então, Inserir outro registro, obtenho a seguinte mensagem de erro: "Cannot update a complex query with more then one table".
Já tentei muitas coisas, até agora nada consegui, se alguem puder me ajudar, desde já muito obrigado!
Luis Gadelha
Curtidas 0
Respostas
Luis Gadelha
15/02/2011
ninguem???
GOSTEI 0
Izomil Filho
15/02/2011
Como está a sua query de insert e update ? Você já tentou Inserir, Atualizar e Excluir o cliente direto via banco usando as querys do sistema ? Quando você está Inserindo, esta usando o POST ? Seu componente está como auto commit ? Se não estiver você esta fazendo commit ? Pelo que entendi do erro ele está reclamando da query, creio que você deve estar tentando atualizar duas tabelas diferentes ao mesmo tempo ou fazendo alguma outra coisa na query que não é permitido, posta tua query ai !
Até mais.
Até mais.
GOSTEI 0