Hercles Posted October 6, 2013 at 12:28 AM Report #527763 Posted October 6, 2013 at 12:28 AM Erros que aparece no Lazarus quando se copila. Que tipo de erro seria este? Projeto project1 elevou classe exceção 'RunError(217)'. no endereço 7FEFD08940D
I-NOZex Posted October 6, 2013 at 10:53 AM Report #527784 Posted October 6, 2013 at 10:53 AM (edited) so diz esse erro? o depurador nao aponta nenhuma linha onde está a causa do problema, ou que linhas correu antes de dar erro? isso é um erro ao nivel da execução...e entretanto deixo aqui uma boa resposta a explicar o que sao os tipos de erro run-time e compile-time http://stackoverflow.com/a/846421 quanto ao problema em si, nao te posso ajudar mais, tens que dar mais informação... codigos que tejam no build do form ou no onshow... Edited October 6, 2013 at 10:56 AM by I-NOZex B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
nunopicado Posted October 6, 2013 at 12:49 PM Report #527797 Posted October 6, 2013 at 12:49 PM É, isso é um erro de acesso à memória. Uma qualquer instrução que lá tens que está a aceder ao que não deve. Muito possívelmente, estás a usar um comando num evento de um qualquer componente, que ao ser criado executa o evento antes do que tu estás à espera, e logo, o tal comando é executado, dando origem ao erro. Tenta o seguinte: A cada evento que estejas a usar, um de cada vez, comenta o código que lá está. Quando deixar de dar erro, é porque é esse evento que está a ser executado mal. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 6, 2013 at 01:26 PM Author Report #527801 Posted October 6, 2013 at 01:26 PM erro nesta linha //filedata.loadfromfile(filename); mas é porque eu estou aprofeitando o codigo de outro projeto e esta linha não se aplicaria a esse que estou fazendo, eu acho.... 🙂
nunopicado Posted October 6, 2013 at 02:59 PM Report #527809 Posted October 6, 2013 at 02:59 PM Então está resolvido, certo? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 6, 2013 at 03:34 PM Author Report #527813 Posted October 6, 2013 at 03:34 PM a principio sim. 🙂
Hercles Posted October 6, 2013 at 04:03 PM Author Report #527815 Posted October 6, 2013 at 04:03 PM Mas o banco que eu criei no window MYSQL ele fica salvo em alguma pasta?
nunopicado Posted October 6, 2013 at 06:53 PM Report #527820 Posted October 6, 2013 at 06:53 PM Claro que sim... Mas para ti, isso deve ser invisivel. Queres copias a base de dados, usas os comandos respectivos ou um utilitário de gestão, como o HeidiSQL, nos ficheiros não deves mexer. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 6, 2013 at 11:24 PM Author Report #527833 Posted October 6, 2013 at 11:24 PM é porque vou ter que enviar o projeto e se tiver que enviar o arquivo do MYSQL não se aonde ele vai esta....
nunopicado Posted October 6, 2013 at 11:44 PM Report #527835 Posted October 6, 2013 at 11:44 PM é porque vou ter que enviar o projeto e se tiver que enviar o arquivo do MYSQL não se aonde ele vai esta.... Volto a dizer, tu não copias o ficheiro do MySQL. Copias um backup da base de dados. Este será depois reposto no servidor do professor, e funcionará a partir de lá. Por isso é que te falei ao inicio em usares o SQLite. Aí sim, era um ficheiro que mandavas com o programa. No MySQL tens de executar um backup da base de dados (há várias formas, como o HeidiSQL ou o MySqlDump) que será reposta. No lado do teu software, terás de permitir que o utilizador escolha o endereço do servidor, username e password, porta TCP e nome da base de dados. É assim que o MySQL funciona. Também já o disse, preocupa-te agora a fazer a versão 1 do programa. Quando a concluires, voltamos a falar sobre o MySQL. Só para não morreres de ansiedade até lá, procura o ficheiro mysqldump.exe que está na pasta do MySQL. Depois, executa-o assim: mysqldump -h127.0.0.1 -uroot -padmin --single-transaction --default-character-set=utf8 --result-file="c:\copia_bd.sql" BDNome Onde 127.0.0.1 é o IP do computador que tem o MySQL instalado (se executares isto no próprio PC, podes deixar o 127.0.0.1) root é o nome de utilizador do servidor MySQL - Substitui pelo que tiveres configurado admin é a password do utilizador escolhido - Substitui pela que tiveres configurado c:\copia_bd.sql é o caminho e nome do ficheiro onde queres gravar o backup BDNome é o nome da base de dados que queres copiar - Substitui pela que tiveres configurado Para repor a base de dados com este ficheiro, precisarás por exemplo do mysql.exe, que está geralmente na mesma pasta do mysqldump.exe mysql -h127.0.0.1 -uadmin -padmin BDNome < c:\copia_bd.sql "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 6, 2013 at 11:57 PM Author Report #527836 Posted October 6, 2013 at 11:57 PM pensei que a parte dois do trabalho fosse mais fácil, estava pensando entregar incompleto mesmo... fiquei o dia todo pesquisando a parte um e não consegui fazer nada... 😞
nunopicado Posted October 7, 2013 at 11:21 AM Report #527862 Posted October 7, 2013 at 11:21 AM Até parece que não conheces o pessoal aqui do forum! 😛 Diz as tuas dúvidas que nós ajudamos. Recomendação: Não tentes fazer a parte 2 sem concluir a 1... Uma casa não se começa pelo telhado. Esquece agora o MySQL, e vamos aos ficheiros. Em quê concretamente é que tens dúvidas? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 7, 2013 at 10:52 PM Author Report #527998 Posted October 7, 2013 at 10:52 PM bom! sei que vou ter uma variável para cpf , nome, idade e salario (acho que todas podem ser do tipo string porque não vou fazer nenhum calculo). vou ter que escolher um algoritmo de busca para o primeiro caso "achar funcionário". sei que vou ter que usar o eof e writeln .... if txtcpf:= cpf then frmfuncionario.txtnome:= nome frmfuncionario.txtidade:= idade; frmfuncionario.txttxtsalario:= salario; como eu faço para ligar o arquivo txt como estas variáveis e separar as string por string e jogar dentro de cada variável?
nunopicado Posted October 7, 2013 at 11:06 PM Report #528000 Posted October 7, 2013 at 11:06 PM Sabes ler do ficheiro uma string? Imagina que tens a seguinte definição: cpf=11 caracteres Nome=40 caracteres Idade=3 caracteres salario=10 caracteres Cada registo vai-te ficar com um total de 11+40+3+10 = 64 caracteres //Reg1: '12345678901Nuno Miguel Picado 36 5000.00' <-- 64 caracteres //Reg2: '21335456513Hercles 22 6500.00' <-- 64 caracteres . . . readln(arquivo,Reg); cpf := Trim(Copy(Reg,1,11)); // O Copy extrai uma substring de outra. A substring começa no primeiro valor (ex.: 1) e tem o tamanho do 2º valor (ex.: 11) Nome := Trim(Copy(Reg,12,40)); // O Trim elimina eventuais espaços que possa haver à esquerda ou direita da substring Idade := Trim(Copy(Reg,52,3)); Salario := Trim(Copy(Reg,55,10)); Convém saberes que há outras formas, muito mais eficientes, de leres um ficheiro de texto. Pessoalmente fazia isto com records e ficheiros tipados, mas a fazer em ficheiro de texto, seria com uma stringlist para carregar todo o arquivo em memória e trabalhar com ele daí. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 8, 2013 at 10:47 PM Author Report #528129 Posted October 8, 2013 at 10:47 PM No menu tem Abrir que seleciona o arquivo texto que eu quero este reg vai ser a variável que recebe este arquivo... no pascal lembro que usava o assign
nunopicado Posted October 8, 2013 at 11:00 PM Report #528132 Posted October 8, 2013 at 11:00 PM Sim, e aqui podes usar algo parecido. Em Delphi é AssignFile e CloseFile (tudo o resto é igual a Pascal), em Lazarus creio ser igual, se bem que nunca usei ficheiros dessa maneira em Lazarus. Eu pessoalmente usava uma TStringList. É uma classe que te carrega todo o ficheiro em memória e te permite percorrer como se fosse um array (é efectivamente um array de strings, embora com algumas funções associadas para ajudar ainda mais). "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 8, 2013 at 11:57 PM Author Report #528133 Posted October 8, 2013 at 11:57 PM seria algo parecido com isso? ah declarei filedata como variável global do tipo Tstringlist; procedure Tfrmmeusfuncionarios.Button1Click(Sender: TObject); var reg: string; begin AssignFile(filedata); while not eof(filedata) do readln(filedata,Reg); cpf := Trim(Copy(Reg,1,11)); // O Copy extrai uma substring de outra. A substring começa no primeiro valor (ex.: 1) e tem o tamanho do 2º valor (ex.: 11) if cpf = txtcpf.text then begin Nome := Trim(Copy(Reg,12,40)); // O Trim elimina eventuais espaços que possa haver à esquerda ou direita da substring txtnome.text:= nome; Idade := Trim(Copy(Reg,52,3)); txtidade.text:= idade; Salario := Trim(Copy(Reg,55,10)); txtsalario.text:= salario; end; CloseFile end; ah fiz este código pra escolher o arquivo que quero usar: procedure Tfrmmeusfuncionarios.mnuprincipalabrirClick(Sender: TObject); begin //tipo de aquivo dlgarquivoabrir.filter:='Aquivos texto (*.txt)|*.txt|'+ 'imagens(*.bmp;*.ico)|*.bmp;*.ico|'+ 'Todos os Arquivos (*.*)|*.*'; dlgarquivoabrir.filterindex:=1; //seleciona tipo.txt //somentes arquivos existentes podem ser selecionados dlgarquivoabrir.options:=[ofshowhelp,offilemustexist]; if (dlgarquivoabrir.execute) then //abrir alguma arquivo? begin filename:= dlgarquivoabrir.filename; // txtnome do arquivo que //foi aberto showmessage ('Aquivo: '+ filename +'foi aberto.'); Panel1.caption:='Contectado ao: '+ filename; //carrega o arquivo na lista de strings // filedata.loadfromfile(filename); //exibe o arquivo no memobox // ativa o botao salvar mnuprincipalsalvar.enabled := true; end else begin showmessage('Abrir Arquivo foi cancelado'); end end; mas isto ==:> AssignFile(filedata); não é aceito pelo copilador....
nunopicado Posted October 9, 2013 at 01:16 AM Report #528134 Posted October 9, 2013 at 01:16 AM (edited) Pois não... 🙂 Primeiro porque o AssignFile, assim como o Assign do Pascal tradicional, precisa de dois argumentos: A variável do ficheiro, e o caminho para o mesmo: AssignFile(f,'c:\teste.txt'); Agora, quando eu falei em TStringList, era de esperar que fosses ver como funciona, e não simplesmente fazer código à toa! A TStringList é um mundo à parte no que toca a manuseio de ficheiros de texto. Esqueces Assign's, Reset's, Rewrite's e tudo o resto. Ex: Queres abrir um ficheiro de texto chamado c:\teste.txt: var lst:TStringList; Idx:Integer; begin lst:=TStringList.Create; // Crias uma instância da TStringList. Lembra-te, uma classe não basta definir o tipo, é preciso criá-la, neste caso, assim lst.LoadFromFile('c:\teste.txt'); // Com isto, todo o ficheiro está carregado. A partir daqui é quase como trabalhar com um array // Exemplo: percorrer o ficheiro for Idx:=0 to lst.Count-1 do // A primeira linha do ficheiro começa em 0. A última é dada pelo método Count - 1 (Count é o número total de linhas) begin ShowMessage( lst[idx] ); // Para acederes à linha, metes o índice à frente da StringList dentro de parentesis rectos cpf:=Trim(Copy(lst[idx],1,11)); . . . end; lst.Free; // Ao trabalhar com classes, devemos libertar a memória por elas ocupadas quando deixam de fazer falta. Logo, o último comando é o Free end; Aprofunda aqui: https://www.portugal-a-programar.pt/topic/51671-trabalhar-com-ficheiros-de-texto-em-delphi/page__hl__tstringlist Edited October 9, 2013 at 01:18 AM by nunopicado "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Hercles Posted October 9, 2013 at 01:50 AM Author Report #528135 Posted October 9, 2013 at 01:50 AM acho que estou entendendo..... me respondi uma coisa quando quero munda de inteiro para string eu uso inttoint e no caso do TStringList
nunopicado Posted October 9, 2013 at 06:53 AM Report #528139 Posted October 9, 2013 at 06:53 AM É exactamente igual. Se tiveres uma TStringList chamada lst e quiseres por exemplo alterar a primeira linha (posição 0): Lst[0]:= IntToStr(2013); A 1. linha ficará com o valor '2013'. A propósito, para adicionar uma linha usas o método Add. Lst.Add('blá blá blá'); E para gravares as alterações no ficheiro fazes: Lst.SaveToFile('c:\teste.txt'); "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now