Ir para conteúdo
Fórum Script Brasil

Eder Moraes

Membros
  • Total de itens

    98
  • Registro em

  • Última visita

Tudo que Eder Moraes postou

  1. {Use esta função para centralizar strings, informe a ela a string que deseja centralizar e a quantidade de colunas contadas.} Function alinhaC(s:string;n:integer):string; // Centraliza uma string em um espaço determinado var Str:String; L:byte; begin str :=''; if n < Length(s) then begin Result := ''; Exit; end; l:=(n-Length(S)) div 2; while l > 0 do begin str:=str+' '; dec(l); end; for l:=1 to length(S) do begin str := str+s[L]; end; Result := str; end;
  2. (Observe que MySQL espera datas em formato: YYYY-MM-DD; que podem ser diferente do que é utilizado em outro banco.) Existe uma cláusula no mysql para fazer o carregamento de arquivos externos para uma tabela de dados ou exportar os dados de uma tabela para um arquivo externo. Para carregar o arquivo de texto "arquivo.txt" para dentro de uma tabela, use este comando no seu console: mysql> LOAD DATA LOCAL INFILE "arquivo.txt" INTO TABLE nome_tabela; Consulte por outros comandos no manual do mysql, e detalhes sobre esta clausula. Eu lhe aconselho fazer o seguinte: Crie um formulario com duas conexões uma delas ligada a uma base de dados e a outra em outra, crie botoes para iniciar o processo de copia. Selecione a tabela de uma base e repasse o valor de cada campo correspondente para outra base. Ai vai um ex, para ser usado caso os campos e indices sejam identicos. procedure TForm1.bitbtn....(..); var i:integer; begin with nome_da_tabela1 do begin if not active then open; first; //depois de estar aberta viu while not eof do begin tabela2.Append; { se seus campos forem diferentes especifique ao invés do for i.... tabela2.fieldByname('nomedocampo').Value := FieldByName('nomedocampo').Value; //para todos os campos que queira repassar para outra tabela, faça a varredura em todas as tabelas que deseja. } for i := 0 to fields.Count -1 do begin //varre os campos tabela2.fields[i].Value := Fields[i].Value; //repassa os valores de uma tabela para outra, mais tome cuidado com o formato de datas. end; tabela2.Post; Next; end; end; end; { outra dica, voce pode usar duas listbox para listar as tabelas de um e outro banco para pegar os nomes das tabelas, dependendo é claro do componente usado para conexão use o dbcon.GetTableNames(Listbox1); isso faz com que suas tabelas apareçam nas listboxs. } valeu, isso é o que eu posso ajudá-lo.
  3. Eder Moraes

    Duvida simples

    Se você não quiser que o usuário acesse o form1 que está atrás, informe que o form2 seja modal. procedure TForm1.Button1Click(Sender: TObject); begin Form2.ShowModal; { só vai funcionar se o form2 já esteja criado pela aplicação. sendo uma aplicação sdi, não funcionará o alt+tab para alternar os formularios. OBS: não funciona para um form mdi } end;
  4. Utilize uma tabela para armazenar dados da compra como incremento, cliente, funcionario, datasaida, valortotal; e outra para armazenar os produtos da compra como incremento, i_compra, i_produto ou descricao, quantidade, valorunit. Explicanto melhor incremento é um indice automático não repetido em uma tabela PK. i_compra pode ser o indice da tabela principal "compra" ou pode-se usar um codigo para identificar-lo de que compra ele pertence é o FK. no final faça com que ele calcule o valor total e armazene na tabela principal. procedure fechaCompra.....; var soma:real; //ou float begin with tbl_itens do begin first; soma := 0.00; DisableControls; while not Eof do begin soma := soma + (fieldByname('quantidade').asfloat * fieldByname('valorunt').asfloat); //não esqueca de multiplicar pela quantidade do produto use asFloat para valores fracionados na quantidade se não use asInteger. next; end; EnableControls; tbl_compra.fieldbyname('valortotal').asfloat := soma; end; end; depois salve com o post ou applyUpdates e commitRet.... dependendo do banco que estais usando.
  5. Você pode simplesmente alterar a imagem dos botões do componente. Declare um novo tipo na sua unit: type DBPicNav = class( TDbNavigator ); Depois é só utilizar: DBPicNav( DbNavigator1 ).Buttons[nbInsert].Glyph := localdaimagem onde nbInsert é o nome do botão para inserir um novo registro, os outros botões são: nbFirst, nbPrior, nbNext, nbLast, nbEdit, nbDelete, nbPost, nbCancel, nbRefresh. Agora, me cansar colocando isso em todos os formulários é ralado. Então vamos criar nosso próprio componente. Vá até o menu Component | New Component , Selecione o seu Ancestor Type: TDBNavigator, Agora selecione o nome de sua classe: TDBPicNav, Edite o codigo para: unit DBPicNav; interface uses Windows, DB, DBTables, IBQuery, WinTypes, Classes, Graphics, Controls, ExtCtrls, DBCtrls, SYSUTILS; type TDBPicNav = class(TDBNavigator) private { Private declarations } protected { Protected declarations } public { Public declarations } constructor Create(AOwner : TComponent); override; published { Published declarations } end; var BtnTypeName: array[TNavigateBtn] of PChar = ('FIRST', 'PRIOR', 'NEXT', 'LAST', 'INSERT', 'DELETE', 'EDIT', 'POST', 'CANCEL', 'REFRESH'); procedure Register; implementation {$R DBPicNav.res} //Arquivo de recurso leia mais adiante do { TDBPicNav } constructor TDBPicNav.Create(AOwner: TComponent); var I: TNavigateBtn; ResName: string; begin inherited; for I := Low(Buttons) to High(Buttons) do begin FmtStr(ResName, 'n_%s', [BtnTypeName[I]]); Buttons[I].Glyph.LoadFromResourceName(HInstance,pchar(ResName)); Buttons[I].Glyph.Width := 64; Buttons[I].NumGlyphs := 2; end; Height := 35; Width := 400; Flat := true; Hints.Text := 'Primeiro Registro'+#13+ 'Registro Anterior'+#13+ 'Próximo Registro'+#13+ 'Último Registro'+#13+ 'Inserir Registro'+#13+ 'Deletar Registro'+#13+ 'Editar Registro'+#13+ 'Confirmar Alterações'+#13+ 'Cancelar Alterações'+#13+ 'Atualizar Alterações'; ShowHint := true; end; procedure Register; begin RegisterComponents('Custom', [TDBPicNav]); end; end. Copie o arquivo: "C:\Arquivos de Programas\Borland\Delphi7\Lib\dbctrls.res" para o diretorio onde foi salvo o codigo anterior .pas, este arquivo é o arquivo de recursos do DBNavigator. Abra o arquivo copiado com o editor de imagens do Delphi, modifique-o e o salve com o nome DBPicNav.res que é chamado em implementation do código acima. Pronto seu componente está pronto para ser instalado e usado. Este componente também pode ser baixado em: Veja também nosso novo e zerado Forúm e participe.
  6. Ele está lhe informando que a array passada como parametro tem que ter um tipo de dados correspondente como retorno. você está usando o DrawCol.... tente usar este codigo em DrawData...: with DBGrid1, Canvas, DataSource, DataSet do begin if (RecordCount = 0) then Exit; //sai caso não tenha registro algum para desenhar. if gdSelected in State then begin Brush.Color := corSel; //cor do item selecionado Font.Color := $00804000; end else begin if odd(RecNo) then begin Font.Color:= clBlack; Brush.Color:= corZebra1; //cor da zebra 1 end else begin Font.Color:= clBlack; Brush.Color:= corZebra2; //cor da zebra 2 end; end; //essas cores podem ser em $99999999 ou clBlue vinculado FillRect(Rect); TextOut(Rect.Left+2,Rect.Top,Field.AsString); end; se quiser algo melhor que não seja preciso colocar isso todas as vezes em seu grid, >>> procure por dbzebragrid neste forum, clique em pesquisar no topo e digite dbzebragrid, se não conseguir encontrar ai vai o link DBZebraGrid Sendo o seu ancestor o DBGrid, não esqueça. OK.
  7. Bom este componente eu mesmo adaptei para meus programas, andei por ai pesquisando muito mais não encontrei nada que se adequace para minhas aplicações, e todo dbgrid que eu coloca-se em um formulario eu teria que fazer alterações no próprio ou fazer chamadas a funções para alterar o grafico e o modo de uso do componente então decidi fazer o meu próprio. Espero que vocês gostem. Tem uma função para organizar as colunas nos tamanhos exatos para os campos e seus conteudos, assim como no excel quando você clica duas vezes na barra de indicadores entre as colunas ou linhas, coisa que você não encontra com facilidade por ai. Basta clicar uma vez no title do grid, e pronto as colunas são organizadas automaticamente evitando a fadiga de organizá-las manualmente. Após a abertura da tabela ou consulta você pode executar a organização assim: DBZebraGrid1.OnTitleClick(DBZebraGrid1.Columns[x]); //o X pode ser qualquer coluna da grade de 0 a ...; Tem outra para copiar o conteúdo da linha selecionada para área de transferencia do windows e pode ser colada em outro programa como o Word, Excel ou Notepad. Pode setar a cor da seleção de uma linha, e também as cores para zebra. { Todos os direitos reservados para http://linformatica.com.br Autor: Eder Moraes de Castro Ano: 2006 -- 2012 } unit dbZebraGrid; interface uses Windows, Forms, DBGrids, DB, DBTables, Grids, WinTypes, Classes, SysUtils, Math, Dialogs, Graphics, Controls, ClipBrd; type TDBZebraGrid = class (TDBGrid) private zb,cp,al:boolean; zsel,z1,z2:TColor; function getCP:Boolean; function getAL:Boolean; function getZebrar:Boolean; function getZebra1Color: TColor; function getZebra2Color: TColor; function getZebraSelColor: TColor; procedure setCP(const value:Boolean); procedure setAL(const value:Boolean); procedure setZebrar(const value:Boolean); procedure setZebra1Color(const Value: TColor); procedure setZebra2Color(const Value: TColor); procedure setZebraSelColor(const Value: TColor); protected procedure DrawDataCell(const Rect: TRect; Field: TField; State:TGridDrawState); override; procedure TitleClick(Column: TColumn); override; procedure KeyUp(var Key: Word; Shift: TShiftState); override; public constructor Create(AOwner : TComponent); override; procedure copiaConteudo; published property DefaultDrawing default false; property ZAlarg_Columns : Boolean read getAL write setAL; property ZCtrlC_CopiaLinha : Boolean read getCP write setCP; property Zebra : Boolean read getZebrar write setZebrar; property ZebraSelColor : TColor read getZebraSelColor write SetZebraSelColor; property Zebra1Color : TColor read getZebra1Color write setZebra1Color; property Zebra2Color : TColor read getZebra2Color write setZebra2Color; end; procedure Register; implementation constructor TDBZebraGrid.Create(AOwner : TComponent); begin inherited Create (AOwner); DefaultDrawing := false; FixedColor := $00E9E9E9; TitleFont.Style := [fsBold]; TitleFont.Color := $00804000; al := True; cp := True; Zebra := True; ZebraSelColor := $00FFC959; Zebra1Color := $00FFFBF0; Zebra2Color := $00FFF5DF; Options := [dgRowSelect,dgTitles,dgColumnResize,dgColLines,dgTabs,dgConfirmDelete,dgCancelOnExit]; end; procedure TDBZebraGrid.DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); begin inherited; if not zb then begin DefaultDrawing := true; Exit; end else begin DefaultDrawing := false; with Canvas do begin if (DataSource.DataSet.RecordCount = 0) then Exit; if gdSelected in State then begin Brush.Color := zsel; Font.Color := $00804000; end else begin if odd(DataSource.DataSet.RecNo) then begin Font.Color:= clBlack; Brush.Color:= z1; end else begin Font.Color:= clBlack; Brush.Color:= z2; end; end; FillRect(Rect); TextOut(Rect.Left+2,Rect.Top,Field.AsString); end; end; end; procedure TDBZebraGrid.TitleClick(Column: TColumn); var I,X:integer; valc:string; begin inherited; if al then with DataSource.DataSet do begin if recordCount = 0 then Exit; valc := Fields[0].AsString; DisableControls; if Active then begin for i := 0 to FieldCount -1 do begin First; X := Length(Fields[i].DisplayText); while not Eof do begin X := Max(Length(Fields[i].DisplayText),X); Next; end; Fields[i].DisplayWidth := X+3; end; Locate(Fields[0].DisplayName,valc,[]); end; EnableControls; end; end; procedure TDBZebraGrid.KeyUp(var Key: Word; Shift: TShiftState); begin case key of 67: begin if GetKeyState(17) and 128 > 0 then begin if (DataSource.DataSet.RecordCount = 0) then Exit; if cp then copiaConteudo; end; end; end; end; function TDBZebraGrid.getZebra1Color: TColor; begin Result := z1; end; function TDBZebraGrid.getZebra2Color: TColor; begin Result := z2; end; function TDBZebraGrid.getZebraSelColor: TColor; begin Result := zsel; end; function TDBZebraGrid.getZebrar: Boolean; begin Result := zb; end; function TDBZebraGrid.getCP: Boolean; begin Result := cp; end; function TDBZebraGrid.getAL: Boolean; begin Result := al; end; procedure TDBZebraGrid.setZebra1Color(const Value: TColor); begin if z1 <> Value then begin z1 := Value; Changed; end; end; procedure TDBZebraGrid.setZebra2Color(const Value: TColor); begin if z2 <> Value then begin z2 := Value; Changed; end; end; procedure TDBZebraGrid.SetZebraSelColor(const Value: TColor); begin if zsel <> Value then begin zsel := Value; Changed; end; end; procedure TDBZebraGrid.setZebrar(const value: Boolean); begin if zb <> Value then begin zb := Value; Changed; end; end; procedure TDBZebraGrid.setCP(const value: boolean); begin if cp <> value then begin cp := value; Changed; end; end; procedure TDBZebraGrid.setAL(const value: Boolean); begin if al <> value then begin al := value; Changed; end; end; procedure Register; begin RegisterComponents('Custom', [TDBZebraGrid]); end; end. Visiti-nos! Linformatica - Hosting services
  8. Verifique se seu banco de dados tem suporte a este comando de extração do mes em uma data registrada em um dos campos e verifique como usar em seu banco, isso pode variar de base para base de dados. 'where extract(month from campodata) = :Mes' Ele está na clausula where verifique se pode ser usado para ordenar ou agrupar registros.
  9. Bom se você usa odbc, abra o administrador de fonte de dados ODBC, selecione sua fonte de dados, clique em configurar, depois em avançado, em opções você tem as seguintes opções: MaxBufferSize e seu valor PageTimeOut e seu valor Esses valores podem ser alterados de acordo com o desempenho do seu servidor, e da sua rede, verifique o desempenho de sua rede também, pode haver perda de pacotes no caminho ou broadcast. Agora. Eu lhe aconselho mudar de banco de dados, você pode mudar para mysql, existe um driver chamado MyOdbcConnector ele é um driver para odbc ter acesso a um servidor mysql windows ou linux. baixe o servidor mysql, e baixe tambem o myodbcconnector com suporte a versão do servidor. lhe aconselho o wamp para windows ou lamp para linux, são mais completos e faceis de configurar. você poderá utilizar os mesmos componentes que usa para se conectar ao access, atraves do odbc. (TADOConn...)
  10. Você usa que engine (bde, odbc ou acesso direto pelos componentes ado)
  11. Não vi nada de errado em sua chamada a função, você já verificou se não pode ser um problema em sua biblioteca CRYPTEXTLib_TLB, remova ela de seu conjunto de componentes e tente instalá-la novamente se não resolver existem outras funções para cryptografia de textos ou arquivos e até imagens, ai vai uma para strings. Function Crypt(Action, Src, KeyC: String): String; Label Fim; var KeyLen : Integer; KeyPos : Integer; OffSet : Integer; Dest, Key : String; SrcPos : Integer; SrcAsc : Integer; TmpSrcAsc : Integer; Range : Integer; begin Src := Trim(Src); if (Src = '') Then begin Result:= ''; Goto Fim; end; if KeyC = NullAsStringValue then Key := 'ABCDEF1233456789' //esta chave voce pode colocar o que quiser else Key := KeyC; Dest := ''; KeyLen := Length(Key); KeyPos := 0; SrcPos := 0; SrcAsc := 0; Range := 56; if (Action = UpperCase('C')) then begin Randomize; // OffSet := Random(Range); Dest := Format('%1.2x',[OffSet]); for SrcPos := 1 to Length(Src) do begin Application.ProcessMessages; SrcAsc := (Ord(Src[SrcPos]) + OffSet) Mod 255; if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; SrcAsc := SrcAsc Xor Ord(Key[KeyPos]); Dest := Dest + Format('%1.2x',[SrcAsc]); OffSet := SrcAsc; end; end Else if (Action = UpperCase('D')) then begin OffSet := StrToInt('$'+ copy(Src,1,2)); SrcPos := 3; repeat SrcAsc := StrToInt('$'+ copy(Src,SrcPos,2)); if (KeyPos < KeyLen) Then KeyPos := KeyPos + 1 else KeyPos := 1; TmpSrcAsc := SrcAsc Xor Ord(Key[KeyPos]); if TmpSrcAsc <= OffSet then TmpSrcAsc := 255 + TmpSrcAsc - OffSet else TmpSrcAsc := TmpSrcAsc - OffSet; Dest := Dest + Chr(TmpSrcAsc); OffSet := SrcAsc; SrcPos := SrcPos + 2; until (SrcPos >= Length(Src)); end; Result:= Dest; Fim: end; para usá-la apenas declare a unit onde você vai colocar a função na uses em implementation do seu form, onde irá usar o função EX: implementation uses ufuncoes; .. .. .. procedure ..... begin edit1.text := Crypt('C',Edit2.text,'00909d09af090f9asdf'); // edit1 vai receber o valor cryptografado da edit2 edit3.text := Crypt('D',Edit1.text,'00909d09af090f9asdf'); // edit3 vai receber o valor decryp... da edit1. end; esta chave pode ser modificada de acordo com sua necessidade. com tanto que seja usada a mesma para crypt ou decrypt. se a funcao for chamada assim Crypt('D',Edit1.text,NullAsStringValue); será assumida a chave padrão definida dentro da função. OK :wacko:
  12. Você precisa declarar a unit Printers em uses; with Printer do begin Title:= 'Imprimindo relatorio gerado...'; BeginDoc; with Canvas do begin Pen.Width := 5; Font.Name := Fonte;//Fonte Font.Size := Tamanho; //tamanho da fonte altura := TextHeight('A'); {TextOut(X,Y,Texto); }//X para Colunas Y para linhas TextOut(1, 10, Edit1.Text); TextOut(1, 40, Edit2.Text); end; EndDoc; end; Sem a necessidade de usar o qrep, rave ou fastreport
  13. O qrep é inativo no delphi7 para ativá-lo proceda. Abra o delphi7 no menu Components acesse Install p... clique em Add Procure a pasta C:\Arquivos de Programas\Borland\Delphi7\Bin\dcltqr70.bpl clique em abrir em pronto. nas versões superiores como 2005,2007,2009 esta bpl não os acompanha mais. você poderá usar outro gerenciadores de relatórios. como o Rave ou FastReport. OBS: São pagos! Quer uma dica? Migra para o Lazarus >> Identico ao delphi, mesma linguagem, suporta os mesmos bancos de dados e quase todos os recursos oferecidos no delphi inclusive o fastreport, só que gratuitos. O mesmo projeto compilado para windows pode ser compilado em linux, macos ente outro unix e bsd's
  14. Olha só! para criar o formulário e colocar nele o retorno de uma consulta, isso é fácil, e você pode estudar um pouquinho mais. Mais para imprimir os dados já se torna um pouco mais complicado para um iniciante então vou te ajudar um pouco: para imprimir um relatório você pode usar um gerenciador de relatórios como quickreport ou fastreport ou ravereport que são os mais usados por quem trabalha com delphi. Se você não quiser usar um relatório e quizer imprimir direto do formulário, tenho uma rotina para isso. O exemplo a seguir é um procedimento para imprimir um form. Basta informar o nome do mesmo como parâmetro: PrintForm(Form1) esse Form1 é o nome do formulário. Antes de imprimir, a cor atual do form é salva em OldColor e alterada para clWhite (frm.Color := clWhite), para evitar gasto excessivo de tinta da impressora (ou tonner). em uses no topo da unit onde quer implementar o codigo você precisa dessas units Windows, SysUtils, Printers, Forms, Graphics, Controls, Classes; em public declare o seguinte procedure PrintForm(frm: TForm); //segure o ctrl+shift e pressione a tecla C //mais abaixo de implementation procedure T...PrintForm(frm: TForm); var bmp: TBitMap; x, y, WDPI, HDPI: Integer; OldColor: TColor; begin Screen.Cursor := crHourGlass; OldColor := frm.Color; frm.Color := clWhite; frm.Update; bmp := frm.GetFormImage; with Printer do begin Orientation := poLandscape; // ou poPortrait BeginDoc; HDPI := PageHeight div 8; WDPI := PageWidth div 8; x := PageWidth - Round(WDPI * 0.4); {0.4" margem direita} y := PageHeight - Round(HDPI * 0.5); {0.5" Altura do rodapé} Canvas.StretchDraw(Rect(0, 0, x, y), bmp); EndDoc; end; bmp.Free; frm.Color := OldColor; Screen.Cursor := crDefault; end; //para chamar este procedimento em outro formulário você precisa declarar o nome da unit onde ele foi criando na uses do formulário em questão. //chame desta maneira: PrintForm(Form1) ou PrintForm(frm_imprimir) ou PrintForm(outro_nome_de_formlario_a_ser_impresso); no evento onClick de um botão ou outro evento de outro componente. OK.
  15. Coloque no seu evento a verificação do campo onde colar o texto. if edit1.Focused then cola no edit1 else if richedit1.focused then cola no rich... sempre verifique se o campo esta em foco ou selecionado.
  16. Você pode fazer o seguinte, primeiro fazer a verificação da quantidade de items da devolução, perguntar para o usuario quantos item seram devolvidos para o estoque, vejamos. procedure ....; label volta; var aux : string; begin aux := '1'; volta: if saidaQTDE.AsInteger > 1 then if InputQuery('Devolver?','Quantidade a ser devolvida:',aux) and (aux <> '') then begin {abre uma janela para o usuario especificar a quantidade a ser retornada.} try strtoint(aux) except on exception do begin showmessage('Valor especificado inválido!'); exit; end; end; if strtoint(aux)>saidaQTDE.AsInteger then begin showmessage('Quantidade superior ao permitido para devolução.'); goto volta; end; estoqueQTDE.AsInteger := estoqueQTDE.AsInteger + strtoint(aux); //retorna para o estoque saidaQTDE.AInteger := saidaQTDE.AInteger - strtoint(aux); {se subtrai da saida.} {if saidaQTDE.AsInteger = 0 then //você pode colocar a rotina para eliminar o item....} {OBS: para items fracionado use strtofloat(aux)} end; end;
  17. //declare em public procedure enviaEmail(de,para,ArqAnexo:string); //segure ctrl+shift e precione C para implementar //crie uma variavel global ou local //OBS:este componente existe em algumas versoes do delphi. se voce não encontra-lo procure um sobresalente. var NMSMTP1 : TNMSMTP; procedure enviaEmail(de,para,ArqAnexo:string); begin {ou voce pode adicionado ao formulario} NMSMTP1 := TNMSMP.Create(nil); { Seu servidor SMTP } NMSMTP1.Host := 'smtp.servidor.com.br'; { Porta SMTP, **NÃO MUDE ISTO** } NMSMTP1.Port := 25; { Nome de login do usuário } NMSMTP1.UserID := 'MeuLogin'; { Conecta ao servidor } NMSMTP1.Connect; { Se ocorrer algum erro durante a conexão com o servidor, avise! } if not NMSMTP1.Connected then raise Exception.Create('Erro de conexão'); with NMSMTP1.PostMessage do begin { Seu e-mail } FromAddress := de; { Seu nome } FromName := 'Meu Nome'; { E-mail do destinatário } ToAddress.Clear; ToAddress.Add(para); { Assunto da mensagem } Subject := 'Assunto da mensagem'; { Corpo da mensagem } Body.Clear; Body.Add('Primeira linha da mensagem'); Body.Add('Segunda linha da mensagem'); Body.Add(''); { Linha em branco } Body.Add('Última linha da mensagem'); { Anexar arquivos(Se não quiser anexar arquivos, apague as 3 linhas seguintes) } Attachments.Clear; { Endereço do anexo } if ArqAnexo <> '' then Attachments.Add(ArqAnexo); end; { Manda o e-mail } NMSMTP1.SendMail; { Disconecta do servidor } NMSMTP1.Disconnect; end; //no evento de processamento do seu orcamento coloque a chamado ao procedimento. procedure processa..... begin enviaEmail('eu@hotmail.com','voce@hotmail.com','c:\...arq de texto ou imagem'); . . . end;
  18. Eder Moraes

    Processo

    O que voce quer é que o formulario receba parametros de outro formulario, tem uma solucao, só que o formulario só pode receber parametros na inicializacao do mesmo. Se queres é trasferir informacoes de uma aplicacao para outra utilize o registro do sistema ou a gravacao de dados em arquivos ini para a recuperacao destes dados em outra aplicacao. em uses declare IniFiles; Crie uma variavel ini. proced..... var ini:TIniFiles; str:string; begin ini := TIniFiles('diretorio\nomedoini.ini'); with ini do begin if checkbox1.checked then str := 'ativo' else str := 'inativo'; readString('classe',''); //le o valor da classe do ini writeString('classe',str);//escreve o valor da classe do ini end; end; este é só um ex não o utilize desta maneira na sua aplicacao voce pode tambem utilizar a gravacao em registro com o TRegistry.
  19. Use desta maneira: with dm.q_relatorio_clientes, SQL do begin Close; Clear; Text := 'select * from tbl_relatorio_clientes where codigo like :param'; ParamByName('param').asstring := DBEdit1.Text + '%'; Open; First; // é usado apois a abertura da tabela, antes do while. DisableControls; while not Eof do begin soma1 := soma1 + Fieldbyname('valor').Value; Next; end; EnableControls; . . . end;
  20. Procure por TRATAMENTOS DE ERROS do banco de dados que voce esta utilizando. Para o SqlServer funcionar perfeitamente voce tem que ter um computador mais potente para isso, pois ele requer bastante da maquina servidor, e outra coisa o servidor não pode ser utilizado como terminal.
  21. Eder Moraes

    Duvida MDI Form

    O segundo form como ele não abre maximizado no gerente MDI, que é o formulario menu acha que deve manter todos os outros formularios da mesma maneira, então voce pode colocar o form secundario como SDI e modal, assim abri-lo como dialogo. Dessa forma o form principal não é restaurado para o tamanho original. Organize a posição do formulario : poScreenCenter
  22. Verifique o formato da imagem que estais tentando armazenar se jpg ou gif ou outra que não seja bmp... converta primeiramente o arquivo para o formato bmp. Existem codigos para isso. verifique tambem o tamanho do campo e se é do tipo blob. Tudo isso voce tem que levar em consideração.
  23. Altere sua forma de conexão de BDE para dbGo - Ado voce pode utilizar o ODBC do Sistema como gerenciador. E acessá-lo via rede o servidor.
  24. Coloque no evento onEnter do TEdit o seguinte, vamos usar como ex o TEdit1 TEdit1.SelStart := length(TEdit1.Text); SelStart : marca o inicio da selecao length : conta quantos caracteres temos o edit e inicia a selecao apartir do ultimo.
  25. mais uma dica no floattostr(x) ele remove o 0 se for por exemplo 30,00 ficando apenas 30. você pode por assim FormatFloat('###,##0.00',X); ele lhe retornara 30,00 ou coloque o R$ na frente do primeiro #. mais só ah um problema nisso você não podera recalcular o numero formatado a não ser que se retire o formato, isso é mais usado na construcao de relatorios. beleza.
×
×
  • Criar Novo...