Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Não entendir ou será LookupDataSet, você quer dizer que a table esteja aberta.?é isto mesmo, você entendeu.Antes de abrir a tabela principal, as que são utilizadas como lookup devem estar abertas (questão de ordem). Quando você se movimentar no dataset principal, os campos que vem do dataset de lookup sâo automaticamente atualizados (ela é reposicionada). Como eu uso a query para poder concatenar? algo como: select (Codigo +' '+ Descricao) as Descricao from CadPecas order by PecaIDnesta consulta, você tem um campo Descrição que é a concatenação de Código e Descrição, ordenação pelo PecaID que será o campo utilizado para lookup. Será que era isto?
  2. Sobre o assunto, há posts parecidos aqui no forum e que podem ajudar a entender melhor esse negócio de somar data/hora: - dá uma olhada deste post em diante. - para saber mais sobre o TDateTime, Pode dar uma olhada neste post também. Abraços
  3. No dataset ligado ao DBGrid (Saidaproduto), crie um campo lookup (acho que você já sabe fazer isto, mas vou colocar mesmo assim):- acesse a lista de campos do dataset (duplo click no componente); Agora, adicione um novo campo (botão direito -> New field...); Em Name, vamos definir Descricao seguido por Type igual a String e Size conforme definido o referido campo na sua tabela de CadPecas; A seguir, definimos o tipo deste campo como sendo Lookup; Mais abaixo, fazemos a vinculação à consulta definindo KeyFields com o campo de referência a tabela CadPecas - PecaID, DataSet apontando para a consulta à CadPecas, em Lookup Keys selecionamos o campo referenciado (PecaID) e em Result Field selecionamos o campo a ser apresentado - Descricao; Neste procedimento o dataset lookup (CadPeca) pode ser uma consulta ou tabela - fica a seu critério. Se você quer mostrar os dois campos concatenados, você pode utilizar uma query para retornar um campo descrição concatenado ou uma table, com um campo calculado Descricao. - o dataset lookup deverá estar aberto inicialmente. - ele também deverá ser exclusivo para esta finalidade, ou seja, se tiver um dataset sendo utilizado para o cadastro de peças no mesmo form/datamodule - não utilize este; - se for uma query, quando houver alteração na tabela CadPeca, ela terá que ser fechada e aberta para que a lista seja atualizada. Se for table - não precisará; - se você manter as duas colunas no DBGrid (PecaID e Descrição), ao ser digitado o código, a descrição será alterada. Se for selecionada uma descrição, o código será alterado; Se for conveniente, você pode tornar uma das colunas ReadOnly. Veja se você consegue chegar a algum lugar com isto que tentei explicar. Se não der, dá um toque. Eu não tenho certeza que isso funciona certinho com o paradox. Abraços
  4. Micheus

    Raise

    Corrigindo... procedure TF_ConDisc.ButAtivaDesativaClick(Sender: TObject); begin if Not ButAtivaDesativa.Down then {se o filtro não estiver ativo} DSBasico.DataSet := tabBasico else try QryBasico.Close; QryBasico.Open; DsBasico.DataSet := QryBasico; except // *** Tem que haver o except para utilizar o raise raise; end; end;
  5. sim, eu disse que poderia ter problema, mas você tentou implementá-la mesmo assim. Mesmo que seja apenas para saber se é o que você quer? Bom, minha questão ainda continua: o que realmente você quer fazer? Contar ou Enumerar? Quem sabe você possa colocar um protótipo da tela (imagem) que você deseja ter. Abraços
  6. faltou adicionar ADODB na cláusula uses do seu programa. Só para lembrar, no help sobre UpdateBath: Call UpdateBatch to write any pending updates to disk for a dataset that is in batch update mode to the associated database. ainda em notas: Note: To use batch updating, the CursorType property of the dataset component must be either ctKeySet (the default) or ctStatic and the LockType property must be ltBatchOptimistic. São propriedades a serem verificadas. Há também configurações de propriedades da conexão (ADOConnection) que podem influenciar neste tipo de problema: Mode, Attributes e IsolationLevel. Mas eu não uso ADO, então não saberia dizer exatamente o que fazer. Dêem uma olhada nestas questões. Abraços
  7. É que não há um modo de fazer isto do mesmo modo como foi feito lá. Neste caso, campo no DBGrid, acho que você terá concatenar os campos em um único. Se seu lookupsource form uma query, retorne como campo de lookup a concatenação dos dois envolvidos. Se for uma table, então crie um campo calculado com a concatenação dos dois e utilize-o como lookup´. Captou?! Se não, diz ai como você está fazendo o lookup (no campo do DBGrid), o nome das tabelas e campos envolvidos para poder exemplificar. Abraços
  8. vms, desse jeito eu volto a não entender sobre o que estamos falando. Uma coisa é querer mostrar no DBGrid linhas numeradas para cada item (SEQUENCIA): +--------+-------------+ | Numero | Palavra | +--------+-------------+ | 1 | Abobr | +--------+-------------+ | 2 | Abobrinha | +--------+-------------+ | . | . | | . | . | | . | . | +--------+-------------+ | 10 | Abobrona | +--------+-------------+ Outra coisa é querer mostrar quantos elementos existem nesta lista (QUANTIDADE)
  9. Aparentemente esta variável contém um valor maior que o suportado pelo campo na sua tabela.Como sugeriu o colega Jonas, coloque a parte do código em que você manipula estes itens, a declaração da variável e também, como você não deixou claro que banco utiliza, dê uma conferida se este último campo a receber o conteúdo da variável é de um tipo realmente compatível com o valor que você está atribuindo a ele.
  10. Existe uma uma função da API Win32 para isso sim: SetFileTimeEu dei uma pesquisada e, a princípio, não encontrei nada que fizesse tudo em uma única função, então criei uma e coloquei na sessão Tutoriais & Dicas (ver tópico) para que outros possam facilmente encontrá-la. Usei como ponto de partida esta função na página do Torry's - link ref. Abraços
  11. A função faz uso da função SetFileTime da API Win32, a qual permite alterar as informações em questão. function SetFileDateTime(FileName: string; CreateTime, ModifyTime, AcessTime: TDateTime): Boolean; function ConvertToFileTime(DateTime :TDateTime) :PFileTime; var FileTime :TFileTime; LFT: TFileTime; LST: TSystemTime; begin Result := nil; if DateTime > 0 then begin DecodeDate(DateTime, LST.wYear, LST.wMonth, LST.wDay); DecodeTime(DateTime, LST.wHour, LST.wMinute, LST.wSecond, LST.wMilliSeconds); if SystemTimeToFileTime(LST, LFT) then if LocalFileTimeToFileTime(LFT, FileTime) then begin New(Result); Result^ := FileTime; end; end; end; var FileHandle: Integer; ftCreateTime, ftModifyTime, ftAcessTime: PFileTime; begin Result := False; try ftCreateTime := ConvertToFileTime(CreateTime); ftModifyTime := ConvertToFileTime(ModifyTime); ftAcessTime := ConvertToFileTime(AcessTime); try FileHandle := FileOpen(FileName, fmOpenReadWrite or fmShareExclusive); Result := SetFileTime(FileHandle, ftCreateTime, ftAcessTime, ftModifyTime); finally FileClose(FileHandle); end; finally Dispose(ftCreateTime); Dispose(ftAcessTime); Dispose(ftModifyTime); end; end; Como utilizar 1) Alterando todas as data/hora para a atual: SetFileDateTime(<nome do arquivo>, Now, Now, Now); 2) Alterando apenas a data/hora de criação: SetFileDateTime(<nome do arquivo>, Now, 0, 0); 3) Alterando apenas a data/hora de acesso e modificação: SetFileDateTime(<nome do arquivo>, 0, StrToDate('20/01/2005'), StrToDate('18/01/2004'));
  12. Iniciante Programador, dê uma olhada neste tópico que você já vai dando uma partida neste conhecimento. Boa sorte
  13. Ou você errou o nome da última tabela ou não mencionou que a chave é composta, porque numa tabela de funcionário, utilizar UF como chave primária é problema na certa - "Key violation". As chaves primárias não podem se repetir em uma tabela. se a tela for a mesma, mantendo o TDBLookupBomboBox, não seria mais simples apenas desabilitar os campos ou deixar sua tabela ReadOnly (conforme o caso)? Uma opção seria criar um campo Lookup.A sugestão é a seguinte: - Precisaremos de um dataset do tipo query para consultar cada tabela referenciada (UF) onde, deverá ser incluso na cláusula SELECT o campo de referência e o campo de descrição (p.e., UF, DscUF); - Agora, no dataset principal, faremos a referência a este dataset de consulta (lookup); Para isso, em design-time, acesse a lista de campos do dataset principal (duplo click no componente); Agora, adicione um novo campo (botão direito -> New field...); Em Name, vamos definir DscUF seguido por Type igual a String e Size conforme definido o referido campo na sua tabela de UF; A seguir, definimos o tipo deste campo como sendo Lookup; Mais abaixo, fazemos a vinculação à consulta definindo KeyFields com o campo de referência a tabela UF, DataSet apontando para a consulta à UF, em Lookup Keys selecionamos o campo referenciado e em Result Field selecionamos o campo a ser apresentado - DscUF; Com isto, você tem agora um campo DscUF no seu dataset principal (o ADOTable funcionario) que poderá ser associado a um TDBEdit. Mesmo assim, a questão de não permitir edição em um componente do tipo data-aware (os TDB...) estará vinculado ao fato de o dataset estar ou não no modo ReadOnly ou o respectivo componente com suas propriedades Enabled (false) ou ReadOnly(true) devidamente setadas. Obs: Antes de o dataset principal ser aberto, as consultas lookup's já devem estar abertas; felipe, ele já disse:
  14. Lucifer, só para adiantar (você ainda não respondeu aos pertinentes questionamentos do felipe), se for utilizar o QuickReport dê uma olhada neste post, pois é basicamente o que você vai precisar fazer.
  15. Micheus

    Combobox

    Voce já conferiu se está abrindo o dataset que você ligou a propriedade ListSource? É este o motivo comum.
  16. Por acaso seu programa, quando minimizado, estará "fazendo" alguma coisa que mereça ser "fotografada"? :unsure:
  17. Já a minha dúvida é: onde está a definição da procedure Inicio no form F_EdtDisc? Muito provavelmente, a função Inicio tem a declaração do parâmetro precedida por var (por isso o formal na mensagem). O resto, é mais ou menos como o HDelphi já disse: o campo que você está passando (COD_DISCO) é diferente tipo que a sua procedure espera receber. Lembrando que você só precisa utilizar o var no cabeçalho de uma procedure ou função, quando você quer alterar o parâmetro que foi passado e que ao sair da procedure a variável, que foi passada na chamada, permaneça com este valor. Quando você utiliza var, o compilador irá gerar o código, passando o endereço da variável e não uma cópia do conteúdo da mesma.
  18. Micheus

    Combobox

    Isto que você quer fazer é localização/busca. Há bastante questões sobre isso aqui no forum. Sugiro que você utilize a opção Pesquisa (na barra de opções do forum), procure por "localizar" ou "busca" ou "locate" ou "like" que você vai achar pistas sobre como implementar isto. Mas, basicamente, para localizar uma informação e mostrá-la no DBGrid, você pode utilizar Locate, FindKey, ou instrução SQL como Like e utilizar a entrada (TEdtit ou campo selecionado no TDBLockupComboBox). Há "n" modos de se fazer uma consulta e depende de que tipo de dataset você está utilizando para mostrar os dados no seu DBGrid (se Table ou Query). Vai precisar dar mais detalhes, mas antes, como disse, dê uma pesquisada. Abraços
  19. Hudson, o que você quiz dizer com "Database Desktop"? Está se referindo a ferramenta (programa) que acompanha o Delphi? Você por acaso já utilizou o botão Pesquisar aqui do forum? Tenha certeza que sobre este assunto, sua dúvida não é a primeira.Segue uns post's para você dar uma olhada: - http://scriptbrasil.com.br/forum/index.php...oto,and,paradox - http://scriptbrasil.com.br/forum/index.php...magem,and,banco - http://scriptbrasil.com.br/forum/index.php...magem,and,banco O tipo do campo a ser definido no banco vai depender do bando que você está utilizando. Por ex., se for Paradox é GRAPHICS; se for Interbase, MySQL, Firebird é BLOB; se for MS Access é ObjetoOLE.....
  20. felipe, para recuperar sua senha é bem facinho, siga o link (pô, mas nem faz tanto tempo - 06/06/2007 - que você se logou, tá precisando tomar memoriol. :D)
  21. Antes de começar a fazer algo, dê uma olhada neste Programa: ConTEXT Acho que ele pode ajudar no que você quer fazer. É questão de organização (criar pastas para guardar os códigos, nomes dos arquivos, ...), mas ele tem os recursos do editor como você quer. E tem funcionalidade para várias linguagens de programação, bem como suporte a idiomas (tem Português-BR). Dá uma fuçada nele.
  22. vms, eu estou com a impressão que não gravou eles.Leu o comentário que fiz referente a ApplayUpdates? Acho que pode ser o caso. De qualquer forma, vou então colocar aqui a minha sugestão, adaptando do exemplo em uso: begin CDS_Teste.First; // posiciona no 1º registro while not CDS_Teste.EOF do // varre todos os registros até o fim begin CDS_Teste.Edit; // coloca tabela em modo edição do registro atual CDS_TesteNUM.Value := CDS_Teste.RecNo; // atribui o nº de ordem da linha/registro CDS_Teste.Post; // grava alterações na tabela CDS_Teste.Next; // avança para próximo registro end; end;Observar apenas que o índice selecionado para a tabela deve ser aquele que utiliza a palavra (acho que já é este que você utiliza, mas...) Apenas um comentário: - Este tipo de procedimento (numerar as linhas no DBGrid utilizando um campo na tabela - se é que é isto mesmo) só vai trazer um "probleminha": a cada item incluído, alterado ou excluído, você terá que executá-lo. Do contrário, sua numeração acabará ficando bagunçada. Imagine quando sua tabela tiver alguns mil registros, você executar este procedimento a cada ação? :blink: Abraços
  23. vms, vou dar um chutaço e tenho 99,99% de certeza que vou acertar no gol. :D - Observando que a mensagem de erro continua; - Conferindo os posts iníciais e entendendo que você deve estar utilizando Paradox e normalmente utiliza-se TTable ou TQuery; - Observando que o código que você postou veio do exemplo do HDelphi que utilizou TClientDataSet (CDS_...); Chego a conclusão que, seguindo a observação do HDelphi ("Se estiver usando TTable basta trocar o CDS por Table, (...)"), você fez a troca sim. Mas faltou ser mensionado/pesquisado um detalhe: O método ApplyUpdates não é igual para todos os tipos de dataset. Os componentes da paleta BDE, ou seja os que descendem de TBDEDataSet, não requerem parâmetros. Já os que descendem de TCustomClientDataSet, sim. Então, retire o parâmetro: CDS_Teste.ApplyUpdates; É por isso que não me canso se insistir que, em dúvidas de banco de dados, sejam sempre informados: - Banco utilizado; - Componente de acesso; pelo menos. Em alguns casos, outras informações podem ajudar (p.e, uso de transações) Abraços
  24. Micheus

    Registro Em Branco

    Opa, tinha perdido esta parte do post. É isto mesmo, mas vamos utilizar o termo correto. Em se tratando de orientação de objetos, estamos falando de herança. Assim, o mais apropriado é dizer que: TTable, TQuery, TADOQuery, TIBQuery são classes descendentes de TDataSet, ou seja, que herdam todas as características de TDataSet e possivelmente acrescentam novas. Bom, esta não é uma boa recomendação (eu grifei no texto).Os componentes da paleta InterBase (e já está claro no nome), dizem respeito a acesso a banco de dados InterBase e também pode ser utilizado para o FireBird (mas não recomendo). De um modo geral, cada componente de acesso a banco de dados tem aplicação apenas a alguns tipos - não podem ser utilizados para qualquer um banco - e este é um caso. Os componentes da paleta ADO, normalmente são utilizados para acesso ao MSAccess; Eu, utilizo componentes MDO para aceso ao FireBird - e só serve para ele. Os componentes da paleta Zeos (não vem com o Delphi), possibilitam acesso para: MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle and SQLite (você seleciona que banco vai utilizar); Captou?! Não dá para utilizá-lo para acessar Paradox, por exemplo. Opinião minha: o importante é você saber com qual banco vai trabalhar para saber que componente utilizar. Quando você tem vários componentes que viabilizam acesso a um mesmo tipo de banco, então outros critérios podem ser utilizados: - performance: um componente desenhado para determinado banco, provavelmente terá melhor desempenho do que um que é genérico; - portabilidade: se você puder trocar de banco, não precisará trocar os componentes; - etc. Abraços
  25. Jesus, a sugestão é que você crie um novo projeto. Nele, você adiciona os form's (utilize a opção Add) onde você localiza em cada caminho, as unit's a serem utilizadas (a informação do caminho vai ser mantido no seu novo projeto, que pode estar em outra pasta sem problemas). O que vai ter que verificar é o seguinte: cada um dos seu projetos tem um form principal e, possivelmente, um menu. Então, você vai ter que criar um novo form principal, antes de adicionar os form's dos outros projetos, e nele você coloca o menu com as opções necessárias para formar o novo programa (vai copiando-colando os comandos que estavam nos outros form's principais). É um processo chato, mas acho que só tem este.
×
×
  • Criar Novo...