Ir para conteúdo
Fórum Script Brasil

paulobergo

Membros
  • Total de itens

    295
  • Registro em

  • Última visita

Tudo que paulobergo postou

  1. Grato pela dica! Bateu na trave... Apaguei os arquivos antigos da Indy... removi a Indy10 e instalei novamente... O erro agora só mudou de foco: [Fatal Error] mainf.pas(27): Unit IdGlobal was compiled with a different version of System.RTLVersion [Fatal Error] mainf.pas(27): Unit IdSys was compiled with a different version of System.RTLVersion Sigo tentando... Grato! abraços! * Em tempo... também removi totalmente a Indy10 e compilei e instalei os componentes de novo, "manualmente"... Ainda assim, ao tentar compilar o FTPDemo, a mensagem de versão diferente de System.RTLVersion aparece...
  2. ... não entendi nada... Pode colocar um trecho real do arquivo (umas dez linhas)? Cola dez linhas e depois coloca essas linhas do jeito que terá que ficar... Isso que você digitou parece arquivo de Sintegra... Ok?
  3. Olá pessoal... Eu e minha luta para conseguir fazer uma conexão SFTP... Consegui instalar a Indy10.1.5_d6, sem maiores problemas (depois de excluir tudo da Indy original)... Abri o FTPDemo, fiz as devidas correções para as novas propriedades dos "novos" componentes... Porém, ao compilar, recebo a mensagem... [Fatal Error] mainf.pas(29): Unit IdCommandHandlers was compiled with a different version of IdComponent.TIdComponent Já desinstalei e instalei novamente a Indy mas sempre dá no mesmo... Alguma idéia? Grato! Abraços!
  4. Olá. Tem como melhorar ou piorar a qualidade sim. Para isso, o melhor a fazer é observar o próprio exemplo que acompanha o Delphi. Abra o projeto jpegproj. Ele fica em: c:\arquivos de programas\borland\delphi6\help\examples\jpeg Verá no código que não é complicado melhorar ou reduzir a qualidade da imagem. Veja, por exemplo, como definir várias opções com relação à imagem: . . . procedure TForm1.SetJPEGOptions(Sender: TObject); var Temp: Boolean; begin Temp := Image1.Picture.Graphic is TJPEGImage; if Temp then with TJPEGImage(Image1.Picture.Graphic) do begin PixelFormat := TJPEGPixelFormat(Self.PixelFormat.ItemIndex); Scale := TJPEGScale(Self.Scale.ItemIndex); Grayscale := Boolean(Colorspace.ItemIndex); Performance := TJPEGPerformance(Self.Performance.ItemIndex); ProgressiveDisplay := Self.ProgressiveDisplay.Checked; end; Scale.Enabled := Temp; PixelFormat.Enabled := Temp; Colorspace.Enabled := Temp; Performance.Enabled := Temp; ProgressiveDisplay.Enabled := Temp and TJPEGImage(Image1.Picture.Graphic).ProgressiveEncoding; Image1.IncrementalDisplay := IncrementalDisplay.Checked; end; . . . Ok? Abraços!
  5. sOrigem := 'c:\windows\system32\notepad.exe'; sDestino := 'c:\temp\notepad.exd'; CopyFile(Pchar(sOrigem), PChar(sDestino), False); Ok?
  6. Olá Jhonas! Grato pelas dicas... Esqueci de acrescentar... o componente para acesso a sftp precisa, principalmente, ser completamente free... Não encontrei nenhum até agora... Sabe como é prefeitura em início de governo... caixa quebrado... e verba para desenvolvimento, então, nem pensar... Abraços e obrigado!
  7. Oi pessoal... Com o TidFTP consigo fazer a conexão a um servidor FTP. Porém, preciso fazer a conexão a um outro servidor, que é SFTP... Há algum componente específico (Delphi 6) ou é possível pelo TidFTP mesmo? Grato! Abraços!
  8. Cacilda!!! é Mid!!! (coisa de Basic...) Pelo menos, em parte, já deu certo... mid(DATA_NASCTO, 1, 10) as `Nascimento2` Agora, falta converter isso em data... Algo assim, no MySQL, é tranquilo: cast( concat(substring(DATA_NASCTO, 5, 4), "/", substring(DATA_NASCTO, 3, 2), "/", substring(DATA_NASCTO, 1, 2) ) as date ) as `Nascimento2` Alguma idéia no trio SQL/ODBC/Access? Grato! abraços!
  9. Olá pessoal... seguinte... Preciso executar uma query de consulta a uma tabela no Access. A estrutura da tabela contem, entre outros campos: licenca varchar 4 data-lic timestamp 19 nome varchar 50 data_nascto varchar 50 Como se pode notar, o "ôreiudo" que criou a tabela, tratou de colocar a data de nascimento como varchar mesmo, e com tamanho 50! o conteúdo deste campo é a data de nascimento no formato AAAAMMDD, assim: 19520410 espaços espaços... 19631022 19480329 etc... Essa query funciona: select `licenca` as `Código`, `DATA-LIC` as `Data da Licença`, `nome` as `Nome do Feirante`, `DATA_NASCTO` as Nascimento1 from feirante mas essa não funciona... select `licenca` as `Código`, `DATA-LIC` as `Data da Licença`, `nome` as `Nome do Feirante`, `DATA_NASCTO` as Nascimento1, substring(`DATA_NASCTO` from 1 for 10) as `Nascimento2` from feirante Então... como fazer para um "substring" funcionar na query, para conseguir usar uma função cast e converter esta "data" do tipo varchar para tipo timestamp mesmo... Grato por qualquer ajuda! Abraços! Em tempo: para acessar os dados das tabelas, uso uma conexão ODBC para proporcionar o acesso através de uma aplicaçãol em Delphi6...
  10. Infelizmente, não é possível... A aplicação é executada no NetTerm, em modo texto... Nas aplicações Web conseguimos sim gerar os documentos .pdf via php mesmo... daí a idéia de conseguir gerá-los também nas aplicações corporativas em Opus (banco de dados OpenBase, da Tecnocoop)... Basicamente, são cerca de 1200 usuários usando duas aplicações através do NetTerm... um sistema de controle de documentos (Protocolo) e um sistema de arrecadação... Há também as aplicações Web, estas, em sua maioria, em PHP... De qualquer forma, fico no aguardo por qualquer idéia... Grato!
  11. Olá pessoal... Dentre várias linguagens, no meu local de trabalho geramos aplicações em Opus (uma espécie de XHarbour/Clipper, no Linux) que compila fontes tipo ".f" (99% .prg). Por ser "compatível" com Clipper, a linguagem tem o comando RUN, que nos permite executar programas externos. Alguns relatórios dos nossos programas são formatados em html. E uma das coisas que gostaríamos de fazer é converter tais relatórios em arquivos .pdf... algo como chamar uma aplicação no Linux que faria isso... como um comando run /users/pjf/bin/kconverte /users/protocolo/impressao/bergo/processos.html /users/protocolo/impressao/bergo/processos.pdf E então... existe algum programa que faz essa conversão? Grato e abraços!
  12. Programinha????????????? Não desvaloriza o seu trabalho... programinha, softerzinho, sisteminha... é um "bom" mau-começo... Bem... a resposta do nosso colega aí está correta... Eu sugiro (além da sugestão de nunca chamar um programa seu de programinha), que você procure dar uma olhada na documentação do Sintegra. Tenho observado que todo sistema de controle de compras, vendas, estoque, fatalmente tem o destino líquido e certo de gerar as informações que as fiscalizações estaduais exigem sobre movimentação de mercadorias... Lendo sobre as exigências do Sintegra, você terá a base da formação de suas tabelas... Exemplo: - a tabela de produtos vendidos ou comprados deve ser única, contendo campos que determinam o tipo de operação (entrada ou saía), e outros... Se quiser saber mais, pesquise Sintegra Mesmo que o seu "sisteminha" não tenha pretensões de ser uma aplicação fiscal, a receita está toda ali... Para que você tenha uma idéia, através das informações do Sintegra, a fiscalização consegue levantar em segundos a movimentação completa de produtos de uma empresa, de quem ela comprou, para quem ela vendeu, a quantidade dos itens, compara a venda da empresa com outras empresas concorrentes no mercado, verifica se sela está recolhendo impostos de acordo com o mercado e a época, etc, etc, etc... Ok? Espero ter ajudado!
  13. Olá... Como o colega disse, dependendo do tipo de banco, dá para fazer muita coisa... Veja, no MySQL: create table `questao` ( idquestao integer unsigned not null auto_increment, pergunta1 varchar(30) not null default 'pergunta1', pergunta2 varchar(30) not null default 'pergunta2', pergunta3 varchar(30) not null default 'pergunta3', resposta1 varchar(3) not null default 'não', resposta2 varchar(3) not null default 'não', resposta3 varchar(3) not null default 'não', primary key (`idquestao`) ) engine = InnoDB; insert into `questao` (idquestao, pergunta1, pergunta2, pergunta3, resposta1, resposta2, resposta3 ) values ( 0, "A Terra é Azul", "O Círculo Tem 2 Lados", "Brasil tem Z", "sim", "sim", "não" ) , ( 0, "O Sal é Doce", "A Lua é de Queijo", "Cobra voa", "não", "não", "não" ), ( 0, "Agua Viva Queima", "Galinha Voa", "Cigarro Mata", "sim", "sim", "sim" ); select sum(if(resposta1="sim", 1, 0)) as sim1, sum(if(resposta2="sim", 1, 0)) as sim2, sum(if(resposta3="sim", 1, 0)) as sim3, sum(if(resposta1="não", 1, 0)) as nao1, sum(if(resposta2="não", 1, 0)) as nao2, sum(if(resposta3="não", 1, 0)) as nao3 from `questao` Resultado: sim1 sim2 sim3 nao1 nao2 nao3 2 2 1 1 1 2 Ok?
  14. Olá pessoal... Seguinte: instalo a BDE como administrador em uma máquina com XP, crio um alias (tipo VisualdBase7 ou Paradox), gravo as tabelas e tudo mais nas pastas referenciadas pelos aliases... instalo a aplicação e pronto! tudo funciona beleza com adminsitrador... Só que quando o usuário loga na máquina (e em um dóminio), não consegue acesso aos dados... No BDEAdmin sequer aparecem os aliases e muito menos se consegue salvar a configuração... Não é possível instalar a BDE com o usuário (regsvr32 bdeinst.dll não funciona) e mesmo alterando as propriedades do executável para que seja executado com credenciais diferentes (de administrador), o programa não acessa os dados... Alguma idéia? Abraços! e Grato!
  15. Qual a finalidade real do tal agendador? Explica assim: O atendente da Telefônica, antes de dizer a data em que o será ligado o telefone do cliente, para não falar abobrinha, digita num campo a data atual e o programa mostra (e grava) a data que ele digitou + 48horas e aí ele fala para o cliente: "a sua instalação está agendada para ..." Ok?
  16. Oi. Para passar os dados de um bd para outro, uso ODBC e o DBExplorer... Exemplos: do Paradox, dBaseIII, VisualDbase7, dBaseIV, Access, Excel, Oracle, PostGreSQL, OpenBase, etc... de e para o MySQL ou para outro banco, uso o DBExplorer... como? Exemplo: crio um alias para o Access... "colegioac" e crio um outro para o MySQL: "colegiomy" No DBExplorer, abro ambos... com os devidos nomes de usuário e senhas. Executo uma query com o comando Insert no alias-fonte. Exemplo: insert into ":colegioac:aluno" ( idaluno, nome, nascimento ) select cast(0 as integer) as idaluno, nome nascimento from ":colegioac:aluno" Bom... BDE+DBExplorer+Conectores ODBC resolvem qualquer parada... E' preciso conhecer apenas determinadas características de cada banco quando montar as queries... Ok? Espero ter ajudado!!!
  17. Excel, Access, dBase, Paradox, VFoxPro, OpenBase... Tudo que preciso converter de/para MySQL, faço através do DBExplorer (Delphi 6>) via ODBC... Se interessar, posto algumas dicas... Ok?
  18. Em tempo... Por sql (é preciso criar as tabelas .dbf pelo alias da BDE), você consegue também melhorar a identificação dos campos, não ficando limitado aos dez caracteres e às abreviações que só complicam mais as coisas... PRODES passaria a ser apenas "DESCRICAO"... ou, se você não conseguir se livrar de colocar um pedaço do nome da tabela antes do nome do campo, pelo menos "PRODUTO_DESCRICAO"... veja: create table "administracao_direta.dbf" ( idadmdireta autoinc, denominacao char(64), sigla char(8), atividade char(30), caracteristica blob(2) ) insert into "administracao_direta.dbf" (denominacao, sigla, atividade, caracteristica) values ( "Secretaria Especial de Planejamento e Administração", "SEPA", "Planejamento", "Secretaria vinculada diretamente ao Prefeito, com estrutura hierárquica definida pela Lei 39339 de 30/12/2000" ) insert into "administracao_direta.dbf" (denominacao, sigla, atividade, caracteristica) values ( "Secretaria Especial de Saúde", "SES", "Saúde", "Secretaria vinculada diretamente ao Prefeito, com estrutura hierárquica definida pelas Lei 39339 de 30/12/2000 e 41020 de 06/09/2002" ) Ok?
  19. Hê! eu não pensaria nem 1/8 de vez em só usar TQuery! Ainda desenvolvo aplicações com tabelas .dbf e escolho duas formas de acesso: via ODBC e diretamente pela BDE. Via ODBC, cria-se uma fonte de dados pelo Administrador ODBC e na BDE, da mesma forma que se cria qualquer alias... As tabelas .dbf criadas na sua aplicação deverão ser do tipo VisualDbase7, dBaseIV ou dBase5... o importante é você usar sempre um campo AutoInc para não deixar que as tabelas sejam criadas no formato dBaseIII... Exemplo, usando ODBC create table "cliente.dbf" ( idcliente autoincrement, nome char(40), cpfcnpj char(14) ); Exemplo, usando a BDE create table "cliente.dbf" ( idcliente autoinc, nome char(40), cpfcnpj char(14) ); Para criar índices, não há diferenças entre ODBC e BDE: create index nome on "cliente.dbf" (nome) create unique index cpfcnpj on "cliente.dbf" (cpfcnpj) * No segundo exemplo aí acima, não será permitido inserir um cpf ou cnpj duplicado... Infelizmente, não é possível definir mais restrições e valores padronizados (default) nas tabelas... pelo menos, até hoje não descobri como fazer isso... Com relação a vantagens de tempo de acesso, aí vão alguns números, para mesmas tabelas, com drivers diferentes (é só uma pequena comparação): - Totalizar 20mil x 16mil registros para preparar um DecisionCube dos lançamentos do IPTU de Juiz de Fora: a) Pelo banco em OpenBase (desconhecido, mas poderoso), via ODBC driver: ~~ 01min 30seg B) Pelo banco de desenvolvimento, em MySQL 5.0.27, via ODBC driver: 16seg c) Pelo banco convertido em tabela local em Paradox (.db): 14seg d) Pelo banco convertido em tabela local em dBase (.dbf, Visual dBase7). via ODBC: 10seg e) Pelo banco convertido em tabela local em dBase (.dbf, Visual dBase7), via BDE: 6seg Tudo isso é bastante relativo e questionável em função da complexidade que seu sistema pode assumir... no caso dos exemplos acima, as tabelas são completamente iguais, com os mesmo índices e a aplicação é exatamente a mesma, tendo um DataModule para fazer a conexão a cada um dos diferentes bancos, sendo necessário destacar que a performance "lenta" do MySQL foi devida à consulta ser feita via rede... Como você precisa usar .dbf, deverá implementar nos campos de entrada de dados o auto-preenchimento... Por exemplo, sempre que iniciar um formulário de inclusão de registro, os campos que não podem ficar nulos deverão ser preenchidos automaticamente... Para entrar com datas, use, por exemplo, TDataTimePicker, pois além de não aceitar uma data nula, você pode definir limites para o usuário... Para valores, não uso TEdit... prefiro o HKCurrEdit (Componente que você precisa instalar), pois já cuida da formatação com milhares e variada quantidade de casas decimais... Exemplo de validação ao sair de um campo: Procedure TFormInclusao.NomeExit(Sender: TObject); Begin If Nome.Text='' then ShowMessage('O campo nome não pode ficar vazio!'); {} End; E para mais detalhes sobre SQL, espie a ajuda do próprio Delphi (LocalSQL.hlp) para começar... Ok? Espero ter ajudado... Observação: No meu trabalho temos muitos sistemas com BDs diferentes, e em dois ambientes (produção e desenvolvimento)... Os principais servidores são Linux... O principal banco de dados é OpenBase (todo o sistema financeiro)... existem ainda BDs MySQL, PostGreSQL, Oracle, Access, Clipper e Paradox... e temos que conviver com todos... Eu, particularmente, prefiro o MySQL...
  20. Bom... tem coisa que não dá para evitar... projetar bem o banco de dados é fundamental e você não deveria pular essa etapa... No MySQL você define qual é o valor "default" de um campo caso você "se esqueça" de preenchê-lo... Numa tabela de estoque, por exemplo, o campo do código de barras não pode ficar nulo e, ainda por cima, não pode ter repetição... assim, na definição da tabela, você define que ele nunca poderá ser nulo, será preenchido automaticamente com 14 zeros e será definido como uma chave única, para evitar repetições... Permitir conteúdo nulo em campos usados em pesquisas e comparações traz surpresas desagradáveis... exemplo: update estoque set quantidade = quantidade+10 where codigo=7893934042921; * se o conteúdo atual do campo quantidade estiver nulo, continuará nulo após a query. * se o campo quantidade foi definido como "not null" e default=0 no banco, ele estará, por default, com a quantidade 0 (zero) e, após a query, passará a ter o valor esperado de 10 (dez)... Ok?
  21. Programinha? Sofeterzinho? Primeiro, você devia se valorizar mais... Segundo... seguir as dicas dos colegas aí... para aprender sobre receitas e despesas, é só olhar o caixa de qualquer condomínio para entender o que é um "LivroCaixa" (primeira dica)... E adiantando... para controlar absolutamente QUALQUER negócio com um "sisteminha" para receitas e despesas, é necessário APENAS uma tabela... que conterá Data Tipo de Lançamento Histórico Número do Documento Valor Exemplo: 02/01/2009 + Saldo Inicial do Caixa 000000 1000.00 02/01/2009 + Recebimento Condominio Ap.101 000393 120.00 02/01/2009 - Pagamento Agua COPASA Ref. Dez/2008 004827 665.00 E assim por diante... E pode melhorar? claro... criar uma tabela de históricos padronizados... e outras coisas que você pode pesquisar... Quanto à urgência, o melhor seria ir ao BB ou CEF e pedir ao gerente um exemplar do MicrosoftMoney... Ok? Espero ter ajudado!
  22. Bom... query é query... table é table... Aí seguem umas idéias... apenas idéias... Se a tabela está apontando para um registro (abacaxi), fazer uma pesquisa em uma query não afetará a tabela... que continuará apontando para o abacaxi... Eu já há uns cinco anos +- abandonei o uso dos componentes db... e os ttable... só uso os tquery sempre passando os dados a serem consultados ou alterados para componetes TEdit, TComboBox, Etc... Assim, nunca mais tive problemas de indexação, travamentos, corrupção, bloqueios de registros nas tabelas VisualDbase7 (.dbf) e Paradox da época... hoje, uso o MySQL... Exemplo: DescricaoEdit.Text := Query1.FieldByName('descricao').AsString; CustoUnitarioEdit.Value := Query1.FieldByName('precocusto').AsCurrency; EmPromocaoCBox.Checked := Query1.FieldByName('empromocao').AsInteger=1; Toda query, passo para texto na íntegra, sem parâmetros: with query1 do begin SQL.Clear; SQL.Add('select * '); SQL.Add('from `'+sCatalogo+'`.`produtos` '); SQL.Add('where codigoean="'+sCodigoEan2Find+'"'); End;{with query1} try query1.open; except query1.SQL.SaveToFile('c:\temp\query_de_pesquisa_de_um_produto.sql'); ShowMessage('Falha ao pesquisar...'); end; * para queries muito complexas, salvá-las para consulta com o DBExplorer, p.e., é uma mão-na-roda! Ok? espero ter ajudado!
  23. Oi pessoal... Antes de Mais Nada, desejo um feliz Natal e um Maravilhoso 2009 com muita saúde, saúde e saúde! Para conseguir contornar uma dificuldade em gravar o conteúdo de algumas câmeras, precisei usar a função UrlDownloadToFile (Unit UrlMon) e o resultado foi bastante satisfatório. Porém, hoje pela manhã, um problema na Internet provocou uma falha na captura da imagem liberada a cada segundo pela câmera e um dos programas mostrou uma mensagem de erro, indicando que o arquivo não pôde ser baixado... O código que contém a função é este: Function DownloadFile1(sSource1, sDest1: String): Boolean; Begin Try Result := UrlDownloadToFile(nil, PChar(sSource1), PChar(sDest1), 0, nil) = 0; Except Result := False; End; Apesar disso, o programa parou na caixa de alerta... interrompendo a gravação da câmera... o desejado é que ele continuasse tentando fazer o download da imagem.... Há alguma forma de "dizer" à "UrlDownloadToFile" para não exibir mensagem alguma em caso de falha? Gratos! Abraços!
  24. a) Na unit do seu projeto, coloca, antes de mais nada, ShortDateFormat := 'dd/mm/yyyy'; isso irá afetar todos os campos de variáveis tipo data da aplicação... B) Quanto às queries, passo a dica, apenas, de organizar em mais de uma linha o seu código sql... eu faria assim: with dm.q_servicos_fim do begin Close; SQL.Clear; Add('Insert into tbl_servicos_fim '); Add('(cod_servico, data_entrada, data_entrega, servico, valor, desc_servico, '); Add(' empresa, responsavel, telefone, celular, email, info_adcionais, '); Add(' data_fim, usuario) '); Add('values '); Add('"'+f_ordem_de_servico.DBEdit1.Text+'", "'+f_ordem_de_servico.DBEdit2.Text+'", "'+f_ordem_de_servico.DBEdit3.Text+'", '); Add('"'+f_ordem_de_servico.DBLookupComboBox1.Text+'", "'+f_ordem_de_servico.DBEdit4.Text+'", "'+f_ordem_de_servico.DBMemo1.text+'", "'+f_ordem_de_servico.DBEdit11.Text+'", '); Add('"'+f_ordem_de_servico.DBEdit7.Text+'", "'+f_ordem_de_servico.DBEdit8.Text+'", "'+f_ordem_de_servico.DBEdit9.Text+'", "'+f_ordem_de_servico.DBEdit10.Text+'", '); Add('"'+f_ordem_de_servico.DBMemo2.text+'", "'+DB_fim.text+'", "'+f_carrega.label1.caption+'")'); SQL.SaveToFile('c:\temp\testar.sql'); Try ExecSQL; Except ShowMessage('teste a query "c:\temp\testar.sql" no DbExplorer!'); End; End;{With dm.q_servicos_fim} Ok? Espero ter ajudado! Um feliz Natal e um feliz 2009!
  25. Oi Pessoal... Resolvido!!! Bastou acrescentar um "ZeroMemory" e um #0 no código... ("bendita PChar!!!!!")... Vejam como ficou: Function Pasta2Del(sPasta2Del: String; bPastaFica: Boolean): Boolean; Var FileStru: TshFileOpStruct; bExclusao: Boolean; lpPasta: LPSTR; Begin ZeroMemory(@FileStru, SizeOf(FileStru)); // ****************** Inclusão desta linha lpPasta := PChar(sPasta2Del+#0); // *********** Alteração desta linha, incluindo o #0! bExclusao := False; FillChar(FileStru, SizeOf(FileStru), 0); FileStru.wFunc := FO_DELETE; FileStru.pFrom := lpPasta; // PChar(sPasta2Del); FileStru.fFlags := FOF_FILESONLY or FOF_SIMPLEPROGRESS or FOF_NOCONFIRMATION; // or FOF_SILENT Ative para não mostrar mensagens // or FOF_ALLOWUNDO Ative se quiser usar a lixeira bExclusao := ((ShFileOperation(FileStru)=0) and (not FileStru.fAnyOperationsAborted)); End; Ok? Abraços!
×
×
  • Criar Novo...