E como você trabalha com os campos lookup's?

Exemplo: Suponhamos uma tabela "Itens de locação" (exemplo clássico). Como 
você mostraria, durante o insert, o título do filme.

Suponhamos ainda que você permita uma "reabertura de locação" para inserir 
novos filmes. Como você faria?



[]'s


Francisco Thiago de Almeida
Enter & Plug Informática
Divisão: Desenvolvimento e Banco de dados
Franca / SP
msn: [EMAIL PROTECTED]

----- Original Message ----- 
From: "Danilo Rogério" <[EMAIL PROTECTED]>
To: <delphi-br@yahoogrupos.com.br>
Cc: <[EMAIL PROTECTED]>
Sent: Thursday, November 24, 2005 2:04 PM
Subject: Re: [delphi-br] Obrigado Danilo - ProviderFlags - Mas... por favor 
esclareça.


Luis, desde que deixei de trabalhar com paradox, não uso mais campos 
fklookup.

  Esse erro que vc mencionou eu desconheço, mas imagino que este erro que vc 
está tendo esse erro, porque seu LookupComboBox está ligado a um 
lookupField(eu nunca liguei combobox em campo fklookup).

  Tente não criar este lookupfield, e simplesmente ligar o lookupcombobox a 
um clientdataset separado, e certifique-se que a query + datasetprovider + 
clientdataset estão ligados corretamente.

  Lembro-me que o Lichot falou uma vez, que sempre que possível deixe a 
tabela que sofrerá alterações(insert, update,delete) o mais simples 
possível(evitando muitos joins). Assim vc ganha em processamento de 
atualização, e evita, por exemplo a necessidade de sempre mexer muito nos 
providers flags.

  A não ser que vc seja o único programador, pois imagine uma equipe de 5 
programadores, e por ventura um deles vai, remove o campo e adiciona de 
novo... o provider foi perdido, e quando for para a produção vai dar PAU.... 
e se for um fim de semana, então, ou seu cliente for de outra cidade... Você 
está pego...

  Att.
  Danilo

Luis Lopes <[EMAIL PROTECTED]> escreveu:
  Danilo,

Pegando um gancho na discursão de vocês...

Num cadastro de clientes, onde tenho que informar qual
a cidade, como no seu exemplo, qual é a melhor forma
de trabalhar?

Eu sempre trabalhei criando um campo lookup (fkLookup)
no clientdataset (cliente, no caso do seu exemplo) e
na tela, coloco um DBLookupComboBox apontando para o
field lookup que criei. Essa é a melhor forma?

Outra coisa: (ainda seguindo o seu exemplo) quando vou
gravar o cliente, e dá algum erro na gravação (um
campo required que não informei, por exemplo), quando
tento escolher a cidade, novamente (depois do erro),
no DBLookupComboBox, aparece a mensagem 'Cursor
Unknow'. Tento novamente mais umas 2 ou 3 vezes e
passa. Procurei na net e as sugestões que encontrei
não resolveu o problema.

Poderia me ajudar com isso?

Abusando mais um pouco, outro erro que acontece muito
e, apesar de eu estar conseguindo resolver, eu ainda
não sei direito o que causa, é o 'invalid point
operation'

Sabe alguma coisa sobre isso?

Agradeço muito qualquer ajuda.

Luis Alberto.


--- Danilo Rogério <[EMAIL PROTECTED]>
escreveu:

> Vc nem precisaria fazer este campo lookup.
>
>   Por ex: Se vc abrir o cadastro de cidade, fizer a
> inclusão de uma nova cidade, ao sair da tela vc ja
> pode atribuir ao campo ID_CIDADE, NOME_CIDADE(da sua
> query do cadastro de cliente) a nova cidade
> cadastrada.
>
>   Att.
>   Danilo
>
> User-BA <[EMAIL PROTECTED]> escreveu:
>
> Sua explanação sobre a configuração dos Flags foi
> por demais esclarecedora.
>
> Vou aproveita para abusar mais um pouco :)
>
> No seu exemplo, a SQL sugere que para a tela de
> cadastro de clientes
> sempre será trazida uma cidade já cadastrada.
> (o que vale para os Updates e Deletes).
>
> Caso seja uma inclusão e a cidade ainda não esteja
> cadastrada, nesta
> tela disponibilizamos de clientes uma opção para
> abrir a tela para o
> cadastro da cidades.
>
> Ok! Tendo que fazer isto, você sugeriria que no
> cadastro de clientes
> deveria ter um campo fazendo um (lookup/nome da
> cidade) entre
> cidades/clientes para buscar/trazer o código da
> cidade? ou você sugere
> alguma outra adaptação em SQL para este fim? Tipo:
> Um Lookup em SQL?
>
> Obrigado pela aula.
> Luciano-User-BA.
>
> Danilo Rogério wrote:
> > Não entendi muito bem se COL_CHAVE também faz
> parte da chave primaria
> > da tabela DICAS(fazendo com que sua tabela tenha
> uma chave composta,
> > mas vou explicar detalhadamente, a maneira como eu
> trabalho
> >
> >   Tabela CIDADE
> >   -----------------------
> >   PK ID_CIDADE
> >         NOME_CIDADE
> >
> >   Tabela CLIENTE
> >   ------------------------
> >   PK ID_CLIENTE
> >        NOME_CLIENTE
> >   FK ID_CIDADE
> >
> >
> >   onde PK é Primary Key(chave Primária) e FK é
> Foreign Key(Chave
> > Estrangeira), no caso de alguem desconhecer essas
> notações
> >
> >   Suponhamos que vamos fazer operações de
> inclusão, exclusão,
> > alteração na tabela CLIENTE, mas queremos mostrar
> o nome da cidade que
> > este cliente mora.
> >
> >   SELECT A.ID_CLIENTE, A.NOME_CLIENTE,
> A.ID_CIDADE, B.NOME_CIDADE
> >     FROM CLIENTE A, CIDADE B
> >   WHERE A.ID_CIDADE = B.ID_CIDADE
> >
> >   Bem, vamos aos flags.
> >
> >   1) Estamos manipulando CLIENTES, certo? Portanto
> apenas as colunas
> > referentes a tabela de clientes devem ser
> atualizadas, ou seja, a
> > coluna NOME_CIDADE é meramente demonstrativa.
> >
> >   2)  Configure os providers flags do SQLDataset
> ou SQLQuery
> >     ID_CLIENTE(é a chave)
> >     pfInfUpdate = True
> >     pfInfWhere = True
> >     pfInfKey = True /// Porque esta coluna é a
> chave
> >     pfInfHidden = False
> >
> >       NOME_CLIENTE
> >     pfInfUpdate = True
> >     pfInfWhere = True
> >     pfInfKey = False
> >     pfInfHidden = False
> >
> >       ID_CIDADE(note que esse campo vem da tabela
> CLIENTE, portanto
> > deve ser atualizado)
> >     pfInfUpdate = True
> >     pfInfWhere = True
> >     pfInfKey = False
> >     pfInfHidden = False
> >
> >
> >       NOME_CIDADE(não precisa atualizar)
> >     pfInfUpdate = False
> >     pfInfWhere = False
> >     pfInfKey = False
> >     pfInfHidden = False
> >
> >   3) Neste mesmo campo NOME_CIDADE, verifique a
> propriedade Requerid =
> > False
> >
> >   4) Faça o Passo 2 e 3 no ClientDataSet também
> >
> >   5) No DataSetProvider, em Update Mode coloque
> Where KeyOnly(Você
> > muda para update mode porque setamos o flag
> pfInfKey para True)
> >
> >   6) Se quiser ajudar o DataSerProvider mais um
> pouco, pode colocar a
> > instrução abaixo no EVENTO onGetTableName:
> >     Table_Name := 'CLIENTE';
> >
> >   Espero ter esclarecido. E dúvidas, postem aí...
> >   Danilo Rogério
> >   Betta Informática
> >
> > User-BA <[EMAIL PROTECTED]> escreveu:
> >
> >
> >
> > Olá!
> >
> > Me esclareçam...
> >
> > Tenho 2 tabelas -> DICAS e -> COLABORADORES
> >
> > Em -> DICAS tenho o campo chave primaria ->
> DIC_CHAVE
> > e o campo chave estrangeira -> COL_CHAVE
> > (COL_CHAVE é a chave primária de -> COLABORADOR)
> >
> > Neste caso, devo configurar no ClientDataSet ->
> ProviderFlags
> >
> > PfInUpdade = True
> > PfInWhere = True
> > PfInKey = True
> > PfInHiden = False
> >
> > Da tabela -> DICAS
> > para os campos -> DIC_CHAVE
> > (chave primaria de DICAS)
> > e COL_CHAVE
> > (chave estrangeira de -> DICAS e chave primária de
> -> COLABORADOR)?
> >
> > ...
> >
> > Ou qual a configuração correta neste caso?
> >
> > Os outros campos de -> DICAS devem ficar:
> >
> > PfInUpdade = True
> > PfInWhere = True
> > PfInKey = False
> > PfInHiden = False ?
> >
> > Aproveitando:
> >
> > Devo setar UpDateMode para -> upWhereAll?
> >
> >
> >
> >
> >
> >
> >
>
_______________________________________________________
> > Yahoo! Acesso Grátis: Internet rápida e grátis.
> > Instale o discador agora!
> > http://br.acesso.yahoo.com/
> >
> >
> >
> > -- 
> > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA
> MENSAGEM >>>>>
> >
> >
> >
> >
> >
>
=== message truncated ===









_______________________________________________________
Yahoo! Acesso Grátis: Internet rápida e grátis.
Instale o discador agora!
http://br.acesso.yahoo.com/



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>





        Yahoo! Grupos, um serviço oferecido por:            PUBLICIDADE
    var lrec_target="_blank";var lrec_URL=new Array(); 
lrec_URL[1]="http://br.rd.yahoo.com/SIG=12fgsnscm/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111264:HM/Y=BR/EXP=1132840061/A=2950750/R=0/id=flashurl/SIG=10tift5qr/*http://br.movies.yahoo.com/";;
 
var 
lrec_flashfile="http://br.i1.yimg.com/br.yimg.com/i/br/ads6/0901_lrec_cinema_calendario.swf?clickTAG=javascript:LRECopenWindow(1)";
 
var 
lrec_altURL="http://br.rd.yahoo.com/SIG=12fgsnscm/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111264:HM/Y=BR/EXP=1132840061/A=2950750/R=1/id=altimg/SIG=10tift5qr/*http://br.movies.yahoo.com/";;
 
var 
lrec_altimg="http://br.i1.yimg.com/br.yimg.com/i/br/ads6/0829_lrec_cinema_calendario.gif";;
 
var lrec_width=300;var lrec_height=250;

---------------------------------
  Links do Yahoo! Grupos

   Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

   Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

   O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do 
Yahoo!.





---------------------------------
 Yahoo! Acesso Grátis: Internet rápida e grátis.
Instale o discador agora!

[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Links do Yahoo! Grupos








        

        
                
_______________________________________________________ 
Yahoo! Acesso Grátis: Internet rápida e grátis. 
Instale o discador agora!
http://br.acesso.yahoo.com/



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a