Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com Clientdataset/mysql


VDLR

Pergunta

Pessoal será que alguém poderia me ajudar. Tenho está procedure que usava com IBTable junto com Interbase e funcionava beleza, estou fazendo alguns testes com clientDataSet e Mysql e ao copilar recebo este erro:

[Error] SMScadfor.pas(139): Undeclared identifier: 'TableName'

A procedure é esta

procedure TFRcadFor.NovRegExecute(Sender: TObject);
begin
  DMdados.TBCadFor.Refresh;
  with DMdados.QRreg do
  begin
   Close;
    SQL.Clear;
     SQL.Add('select max(codigo) as codfor from ' + DMDados.TBCadFor.TableName);
      Open;
     end;
     DMdados.TBCadFor.Insert;
     If DMdados.QRreg['codfor'] <> null then
      DMdados.TBCadFor['codigo'] := DMdados.QRreg['codfor'] + 1
        else
        DMdados.TBCadFor['codigo']:='1';
end;

:huh:

Abraço

Valdecir

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
Pessoal será que alguém poderia me ajudar. Tenho está procedure que usava com IBTable junto com Interbase e funcionava beleza, estou fazendo alguns testes com clientDataSet e Mysql e ao copilar recebo este erro:
[Error] SMScadfor.pas(139): Undeclared identifier: 'TableName'
O que ocorre é que o componente ClienteDataSet não possui a propriedade TableName - que existia no IBTable. Observe aonde foi que você definiu, no seu ClientDataSet, a tabela a ser utilizada. Poderiaser na propriedade CommandText ou se há um DataSetPrivider definido para este componente, então na sua propriedade DataSet você poderá descobrir o nome da tabela.

De qual forma você está utilizando o componente?

Link para o comentário
Compartilhar em outros sites

  • 0
Cara estou usando nesta seqüência SQLConnection, SQLDataSet, DataSetProvider, ClientDataSet e DataSource.
EU acho que teriamos um caminho complicado (e diversificado) para chegar até o nome da tabela.

Vou sugerir o que eu costumo fazer (mas utilizando seus componentes) e você vê se lhe atende.

Eu crio uma função no datamodule principal de minha aplicação, aonde normalmente tenho o database/transaction para conexão ao banco, e para ela passo o nome da tabela e campo a buscar o max. Neste datamodule adiciono um componente exclusivamente para ser utilizado por esta função - em nosso caso um TSQLDataSet (SQLDataSetMax)

function TDMMain.GetNewFieldCod(TableName, FieldName :string) :LongInt;
begin
  SQLDataSetMax.CommandType := ctQuery;
  SQLDataSetMax.CommandText := 'SELECT (MAX('+FieldName+')) AS '+FieldName+' FROM '+TableName;
  SQLDataSetMax.Open;
  Result := SQLDataSetMax.FieldByName(FieldName).AsInteger +1;
  SQLDataSetMax.Close;
end;
a chamada a função eu faço no BeforePost da tabela em questão, no seu caso, ClienteDataSet em questão, observando se ela está no modo inserção:
procedure TDMCliente.CDSClienteBeforePost(DataSet: TDataSet);
begin 
  if CDSCliente.State = dsInsert then
    CDSClienteCOD_CLIENTE.AsInteger := GetNewFieldCod('CLIENTE', 'COD_CLIENTE');
// ou, caso você não adicione os fields ao componente ClienteDataSet:
//   CDSCliente.FieldByName('COD_CLIENTE').AsInteger := GetNewFieldCod('CLIENTE', 'COD_CLIENTE');
end;

Bom, não tenho certeza 100% se funcionaria para a estrutura que você disse estar utilizando, mas acredito que funcione com alguns ajustes - se necessário.

É no que posso lhe ajudar

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...