Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. nO botão de gravar assim: é um programinha simples de lançamentos de controle de visitas de vendedores...mas preciso que ele seja multiusuario.....e agora duas pessoas foram usar e deu erro de alguém poderia me dizer como resolver esta Pepa?? Eder, vale a dica deste outro post. Abraços
  2. Acredito que seria apenas utilizar algo parecido com isto: ... With zQryDeleteByName do Begin ParamByName ('Name').Value := 'Abobrinha'; zConnection.StartTransaction Try ExecSQL; // execute SQL statement in TZQuery // se não ocorrer a exceção, o commit é executado zConnection.Commit; Except zConnection.Rollback; End; End;
  3. No site da Oracle, o Oracle® Database SQL Reference (10g Release 2) não contém qualquer referência a função TO_TIME - aparentemente este estaria sendo o nome de coluna inválido.
  4. SOAD, eu não saberia lhe explicar seus questionamentos, entretanto, dê uma olha nestes links que talvez possam lhe auxiliar a ter uma idéia sobre o assunto:1) Suporte a transações - iMasters; 2) MySQL - Como utilizar todo o poder da versão 4.x - Linux in Brazil; 3) Trabalhando com os Vários Tipos de Tabelas do MySQL - <criarweb>; 4) Delphi: Programação Cliente/Servidor - parte 4 - Linha de Código; 5) Transações - DelphiBr. Espere que ajude Abraços
  5. MySQL - a data, quando concatenada como uma constante, deve estar no formato yyyy-mm-dd. (link) Um exemplo do que coloquei acima: .. QryConsulta.SQL.Add('where data >= ' + FormatDateTime('yyyy-mm-dd', Date)); Se utilizar parametrização, não terá este problema. Abraços.
  6. schaukoski, Ter isto em um DBGrid implica em ter um registro (linha) cadastrado para cada horário (a cada meia hora no seu exemplo). Se isto não for possível (manter informações que possivelmente não serão utilizados), teria como sugestão:1) utilizaria um StringGrid que seria preenchido com o número de linhas necessárias para mostrar os horários e então leria da base os horários gravados e mostraria na respectiva linha. Para gravar na base seria o processo inverso - leria no StringGrid os dados informados e atualizaria/incluiria na base; 2) outra opção, que gosto mais, só que implica em ter um componente do tipo tabela em memória - a RXLib tem um. Neste caso, seria possível carregar os registros da base (real) para a tabela em memória e adicionar as linhas faltantes, para poderem ser editadas no DBGrid; 3) teria ainda a opção de você criar uma tabela temporária, para fazer isto, do mesmo modo que a tabela em memória. Abraços
  7. Vai dando uma olhada neste post, e veja o que você não consegue com ele. Então, posta ai o que ficou pendente. A conversão para ICO não fica legal. Já andei pesquisando, mas não consegui chegar aonde queria. Abraços
  8. Micheus

    Dbimage

    Além do que o colega Vivendo&Aprendendo citou (procedimento para localizar o cliente), você terá que ter um TDBImage ligado ao campo que contém a imagem (FotoCliente) Abraços
  9. Pelo programador: Utilize desta forma ao mostrar seu form: DBLookupComboBox1.KeyValue := Null; (verifique unit Variants na uses) Pelo usuário: Esta propriedade é normalmente utilizada em design-time para definir uma tecla de atalho (eu utilizo DEL, com um hint no componente para informar o usuário) para viabilizar a "limpeza" do valor em KeyValue. Então, se estiver configurada, se o usuário teclar tal tecla no DBLookupComboBox, ele ficará sem seleção alguma. Abraços
  10. Voce consegue colocar um menu na base de um form se utilizar TActionMainMenuBar e TActionManager (ambos da paleta Additonal - Delphi 7), já que este componente permite o posicionamento do menu, dentre outras "perfumarias". Ele é meio "chatinho", mas pode se que sirva para o que você quer. Abraços
  11. Eder, no lugar de EOLN (End Of LiNe) voce não deveria estar utilizando EOF (End Of File)? Me parece que sim. Uma sugestão para "simplificar" seu processamento:... Reset(Txt); // para deixar simplificar algumas coisas, você pode pular as 3 linhas antes de // entrar no While principal, já que será obrigatório chegar a 4a. linha, de modo // que você terá um if a menos para cada linha carregada do arquivo!!! Linhas := 1; while not EOF(Txt) and (Linhas <= 3) do begin Readln(Txt,Entrada); Inc(Linhas); end; // ao sair do while anterior, Linhas é = 4 ou o fim do arquivo foi encontrado // se não foi por fim do arquivo, então você estará posicionado na linha 4 que é // aonde começam seus dados. Deste modo, no próximo While, você percorrerá // o arquivo até o final (seguindo instruções do Churc) mas colocará o ReadLn // exatamente antes do End para que a linha atual seja processada para só // depois ler a nova linha e testar no while se é ou não fim de arquivo While not EOF(Txt) do begin if (Copy(Entrada, 1, 1) = '3') then begin Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Desktop. ... end; ... Inc(Linhas); Readln(Txt,Entrada); end; ... Abraços
  12. Bom, agora o erro está associado a sua instrução SQL - temos apenas um problema para resolver. :D Especificamente neste código que você colocou (parece-me um insert muito menor que o inicial), e sabendo que o erro está no SQL, vamos observar apenas a instrução SQL e não o código "delphi": SQLQuery1.SQL.Add('insert into tbl_clientes '); SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email '); Transcrevendo (retirando o que não é o SQL): 'insert into tbl_clientes ' 'values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email ' Acho que dá para notar a falta de um ")" referente à cláusula VALUES da instrução SQL, não está?! Abraços
  13. Mei, acho que você não está olhando direito para o seu código. :huh: Voce não acha que tem umas aspas sobrando não??? SQLQuery1.ParamByname('cli_name').Value := 'cli_name.text'; por acaso você não está querendo atribuir o conteúdo digitado em cli_name.text, por exemplo? se for, e parece o mais lógico, então retire as aspas de todos os edits que você colocou (e não esqueça de desfazer a "correção" que você disse ter feito na minha sugestão, logo no início do seu último post).
  14. Veja se este código abaixo lhe serve. Não é grande não, só parece assim porque está comentado linha-a-linha ;).Meu código parte da idéia de que você utiliza uma marca em escala de cinza, onde os valores de cada componente (Red, Green e Blue) representam o percentual redutor procedure PutWaterMark(Src, Dst :TGraphic; OffsetX, OffsetY :Integer); type PRGB = ^TRGB; TRGB = record Blue, Green, Red :byte; end; var BmpDst, BmpMark :TBitmap; X, Y :Integer; pxRGBSrc, pxRGBDst :PRGB; begin BmpDst := TBitmap.Create; BmpMark := TBitmap.Create; try // transformamos imagem de origem em Bitmap BmpDst.Assign(Dst); BmpMark.Assign(Src); // varreremos todas as linhas da imagem marca d'água for y := 0 to BmpMark.Height - 1 do begin // inicializamos nosso apontador para o início da Scanline // referente a linha da imagem destino a ser alterada pxRGBDst := BmpDst.Scanline[OffsetY +y]; // movemos o ponteiro para a posição X inicial, aonde será // aplicada a marka d'água Inc(pxRGBDst, OffsetX); // inicializamos nosso apontador para o início da Scanline // referente a linha da imagem origem - marca d'água pxRGBSrc := BmpMark.Scanline[y]; // varreremos todas as colunas na linha atual da marca d'água for x := 0 to (BmpMark.Width - 1) do begin // calculamos a cor do novo pixel na imagem destino // baseado no percentual de cada componente de cor existente // na imagem da marca d'água - o efeito melhor é obtido utilizando // escala de cinza pxRGBDst.blue := Trunc(pxRGBDst.blue *(pxRGBSrc.blue /255)); pxRGBDst.red := Trunc(pxRGBDst.red *(pxRGBSrc.red /255)); pxRGBDst.green := Trunc(pxRGBDst.green *(pxRGBSrc.green /255)); // posicionamos nos respectivos pontos a serem processados inc(pxRGBDst); inc(pxRGBSrc); end; end; // atualizamos imagem destino Dst.Assign(BmpDst); finally BmpDst.Free; BmpMark.Free; end; end; uma outra opção é modificar a parte que faz o cálculo da nova cor do ponto por:Inc(pxRGBDst.blue, Trunc(pxRGBDst.blue *(1-pxRGBSrc.blue /255))); Inc(pxRGBDst.red, Trunc(pxRGBDst.red *(1-pxRGBSrc.red /255))); Inc(pxRGBDst.green, Trunc(pxRGBDst.green *(1-pxRGBSrc.green /255))); utilizando... procedure TForm1.Button1Click(Sender: TObject); var BmpMark :TBitmap; FileStream :TFileStream; begin // inicializando bitmap a ser utilizado como marca d'água BmpMark := TBitmap.Create; // associamos o arquivo de imagem ao stream FileStream := TFileStream.Create('marca.bmp', 0); try // carregamos a imagem para o componente bitmap BmpMark.LoadFromStream(FileStream); // aplicamos à Image1 a marca d'água na posição desejada - 100,100 // como a imagem destino esperada pela função é do tipo TGraphic, // em "teoria" é possível passar qualquer imagem carregada que seja // descendente desta classe (TBitmap, TMetafile, TJPEGImage, ...) PutWaterMark(BmpMark, Image1.Picture.Graphic, 100, 100); finally FileStream.Free; BmpMark.Free; end; end; Abraços
  15. Dando uma forcinha...Converter Txt Para Paradox E Vice-versa - link Txt-db Importador De Banco De Dados (csv,txt Para Db/dbf) - link
  16. Mei, acho que apenas sua concatenação não está sendo feita corretamente. O seu primeiro comentário dentro da concatenação, você tem: ", :cli_auto_ano_mod')'+'". Se não estou interpretando erroneamente, o apóstrofo (') após ":cli_auto_ano_mod" fechará a string iniciada após o "Add(", então, você não poderia simplesmente colocar ")'+'" para fazer a concatenação. Experimente fazer assim (acredito que dará certo) - observe as marcações: SQLQuery1.SQL.Add('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod, ' + ':cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, :cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi, ' + ':cli_auto2_prisma, :cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma'); De qualquer modo, você não precisa fazer uma concatenação tão longa e pouco legível como a anterior. Já experimentou desdobrar a instrução em vários Add's? Acredito que fique mais simples e legível: SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('insert into tbl_clientes '); SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, '); SQLQuery1.SQL.Add(':cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod, :cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, '); SQLQuery1.SQL.Add(':cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi, :cli_auto2_prisma, '); SQLQuery1.SQL.Add(':cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma'); SQLQuery1.ParamByname('cli_name').Value := 'edit1.text'; : : SQLQuery1.ExecSQL; Abraços
  17. Squall Leonhart GT-R, a chamada à Terminate não está encerrando a Thread? Caso a conexão (do socket) for encerrada, isso também deverá provocar o encerramento da sua Thread. Voce não poderia fazer isto - desconectar?
  18. Amigo, isto é apenas um exemplo. É evidente que você não pode declarar as variáveis locais, como eu fiz, sem que atribua alguma coisa a elas. Fiz assim apenas para demonstrar que havia apenas um erro e que deveria compilar a parte utilizada nos cálculos.Voce mencionou anteriormente a existência destas variáveis, logo você deve utilizar essas que você já tinha e não as que eu coloquei no exemplo. Se voltar a dar erro, então verifique se os tipos das variáveis, que você citou no post anterior, equivalem aos que eu declarei localmente neste último exemplo.
  19. Inicialmente houve uma mancada minha, porque não dá para utilizar identificador com o nome acentuado - observe que escrevi HoraSaída e não HoraSaida. Fora isso, não sei que outro problema poderia haver, já que testando aqui no D3, o código da seguinte forma está compilando sem problemas:procedure TForm1.Button2Click(Sender: TObject); var HoraSaida, HoraChegada, TotHoras :TTime; PrecoHora, PrecoTotal :Double; begin TotHoras := (HoraSaida -HoraChegada) *24; if TotHoras < 2 then // aqui força que o mínimo seja 02:00 horas TotHoras := 2; PrecoTotal := TotHoras *PrecoHora; end;
  20. var TotHoras :TTime; begin TotHoras := (HoraSaída -HoraChegada) *24; // transformando em horas a parte inteira conf. expliquei antes if TotHoras < 2 then // aqui força que o mínimo seja 02:00 horas TotHoras := 2; PrecoTotal := TotHoras *PrecoHora; end;Observe que não está havendo arredondamento, ou seja, estamos utilizando a fração minutos e segundos para o cálculo do valor final. Acho que seria isto, verifique. Abraços
  21. Churc, permita-me uma observação, veja se não não entendi errado seu comentário e estarei falando besteira. Também tem a questão da pontuação utilizada na formatação "," e "." (tipo 2.560,00).Se for utilizado o campo associado aos DBEdit's este tipo de problema não acontece. Aliás, eu particularmente, não costumo utilizar este método (DBEdit.Text) para manipular os dados digitados - sempre utilizo o campo do dataset. Assim, supondo que o dataset (ligado no datasource vinculado ao DBEdit) chama-se TableProduto, e os campos em DBEdit1, DBEdit2 e DBEdit3 são respectivamente QTD, VALOR e TOTAL, o exemplo que proporia é o seguinte: TableProdutoTOTAL.AsFloat := TableProdutoQTD.AsFloat *TableProdutoVALOR.AsFloat; Deve ser observado que o dataset deverá estar em edição ou inserção. Observe que a hora (seja em TTime ou TDateTime) é armazenada na parte fracionária de um Double. Então, você tem que ver que fração de tempo você quer multiplicar por $. Seria Horas, tipo 2,50 a hora; seria Minutos, tipo 0,70 o minuto?23:59:59.9999 corresponde a aproximadamente 0,9999999999... então, se você quer calcular valor por hora, você multiplica seu "time" por 24 e pelo valor da hora. Abraços
  22. É não enxerguei :rolleyes: Mas você tentou depurar e verificar o conteúdo das query's, antes do Open? Experimentou copiar os dados (SQL) da QryItens para TmpQry para testar se o resto está ok, ao invés de ela receber os dados?
  23. Voce já experimentou comentar as linhas aonde você modifica EditMask (como por exemplo QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_';)?
  24. Não é mistério não. Se for baixar um pouco o nível, você vai dar de cara com a BDE API. Eu já a utilizei no passado para criar uma rotina de reindexação de tabelas paradox (estavam sempre corrompendo, então...). Dei uma pesquisada e achei um código que talvez você possa testar/adaptar. Vou colocá-lo aqui para facilitar, porque é necessário ser registrado no site para acessá-lo. Ref. Experts Enchange (link) //geobul: //Here is how to use DbiOpenFieldList function: --- type TForm1 = class(TForm) Button1: TButton; Table1: TTable; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} uses BDE; procedure fDbiOpenFieldList(Table: TTable; Physical: Boolean; List: TStrings); function BDEFieldIntToStr(FieldType: Word): string; begin case FieldType of fldUNKNOWN: result := 'unknown'; fldZSTRING: result := 'string'; { Null terminated string } fldDATE: result := 'date'; { Date (32 bit) } fldBLOB: result := 'BLOb'; { Blob } fldBOOL: result := 'boolean'; { Boolean (16 bit) } fldINT16: result := 'integer'; { 16 bit signed number } fldINT32: result := 'long integer'; { 32 bit signed number } fldFLOAT: result := 'float'; { 64 bit floating point } fldBCD: result := 'BCD'; { BCD } fldBYTES: result := 'bytes'; { Fixed number of bytes } fldTIME: result := 'time'; { Time (32 bit) } fldTIMESTAMP: result := 'timestamp'; { Time-stamp (64 bit) } fldUINT16: result := 'unsigned int'; { Unsigned 16 bit integer } fldUINT32: result := 'unsigned long int'; { Unsigned 32 bit integer } fldFLOATIEEE: result := 'float IEEE'; { 80-bit IEEE float } fldVARBYTES: result := 'varbytes'; { Length prefixed var bytes } fldLOCKINFO: result := 'lockinfo'; { Look for LOCKINFO typedef } fldCURSOR: result := 'Oracle cursor'; { For Oracle Cursor type } { Paradox types (Physical) } fldPDXCHAR: result := 'alpha'; { Alpha (string) } fldPDXNUM: result := 'numeric'; { Numeric } fldPDXMONEY: result := 'money'; { Money } fldPDXDATE: result := 'date'; { Date } fldPDXSHORT: result := 'smallint'; { Short } fldPDXMEMO: result := 'Memo BLOb'; { Text Memo (blob) } fldPDXBINARYBLOB: result := 'Binary BLOb'; { Binary data (blob) } fldPDXFMTMEMO: result := 'formatted BLOb'; { Formatted text (blob) } fldPDXOLEBLOB: result := 'OLE BLOb'; { OLE object (blob) } fldPDXGRAPHIC: result := 'Graphic BLOb'; { Graphics object (blob) } fldPDXLONG: result := 'long integer'; { Long } fldPDXTIME: result := 'time'; { Time } fldPDXDATETIME: result := 'date time'; { Time Stamp } fldPDXBOOL: result := 'boolean'; { Logical } fldPDXAUTOINC: result := 'auto increment'; { Auto increment (long) } fldPDXBYTES: result := 'bytes'; { Fixed number of bytes } fldPDXBCD: result := 'BCD'; { BCD (32 digits) } { xBASE types (Physical) } fldDBCHAR: result := 'character'; { Char string } fldDBNUM: result := 'number'; { Number } fldDBMEMO: result := 'Memo BLOb'; { Memo (blob) } fldDBBOOL: result := 'logical'; { Logical } fldDBDATE: result := 'date'; { Date } fldDBFLOAT: result := 'float'; { Float } fldDBLOCK: result := 'LOCKINFO'; { Logical type is LOCKINFO } fldDBOLEBLOB: result := 'OLE BLOb'; { OLE object (blob) } fldDBBINARY: result := 'Binary BLOb'; { Binary data (blob) } fldDBBYTES: result := 'bytes'; { Only for TEMPORARY tables } fldDBLONG: result := 'long integer'; { Long (Integer) } fldDBDATETIME: result := 'date time'; { Time Stamp } fldDBDOUBLE: result := 'double'; { Double } fldDBAUTOINC: result := 'aut increment'; { Auto increment (long) } else Result := 'not found'; end; end; var hFieldCur: hDBICur; rslt: DBIResult; Field: FLDDesc; begin List.Clear; Check(DbiOpenFieldList(Table.DBHandle, PChar(Table.TableName), nil, Physical, hFieldCur)); repeat rslt := DbiGetNextRecord(hFieldCur, dbiNOLOCK, @Field, nil); if (rslt = DBIERR_NONE) then begin List.Add(Format('%s %s %d %d', [Field.szName, BDEFieldIntToStr(Field.iFldType), Field.iLen, Field.iUnits2])); end; until (rslt <> DBIERR_NONE); end; procedure TForm1.Button1Click(Sender: TObject); begin Table1.Open; fDbiOpenFieldList(Table1, True, Memo1.Lines); Table1.Close; end; end. //--- //Regards, Geo - Lista completa, classificada, das funções disponíveis - BDE Developer Suport - link - BDE32.hlp (help da BDE API) - link para download de quem não o tem instalado. Se não me engano, quando instalado, deveria estar em "C:\Arquivos de programas\Arquivos comuns\Borland Shared\BDE" Abraços
  25. Aonde é que você está inicializando a propriedade TmpQry.SQL antes do TmpQry.Open? Não está faltando o TmpQry.SQL := 'select * from nome_tabela'; ? :unsure:
×
×
  • Criar Novo...