Entwickler-Ecke
Internet / Netzwerk - IDHTTP Problem adresse aus edit feld lesen
Petros - Di 24.05.11 02:17
Titel: IDHTTP Problem adresse aus edit feld lesen
Hi Delphianer ich habe mal wieder ein problem und weiß keinen lösungsweg und suche hat mir nix ergeben..
Delphi-Quelltext
1: 2:
| L1.Caption := IdHttp1.Get(Form2.Edit1.Text); der text inhalt wird aus einer ini datei geladen |
Folgenes ich speicher informationen in einer ini datei, in der ini ist eine adresse enthalten die bei jedem start in ein edit.text übergeben wird, diese wiederrum liest informationen von meinem server und gibt diese dann an einem Label weiter. Natürlich könnte ich diese adresse auch direckt über IDHTTP abrufen aber da sich die text datei wo idhttp seine informationen her abruft sich alle 2 tage ändert dachte ich mir das ich dann per edit feld dort die adresse eintrage und nach belieben dann verändern kann. Nun kommt mein problem ich bekomme wenn ich das programm starte immer die meldung
"Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 005FD919 in module 'project1.exe'. Read of address 000002F8'. Process stopped. Use Step or Run to continue."
PS. bevor jetzt jemand irgendwas wegen sicherheit sagt die datei die abgerufen werden soll ist eine log.txt datei von meinem chat
Ich hoffe es war etwas verständlich und mir kann geholfen werden..
MFG Petros
jaenicke - Di 24.05.11 04:23
Prinzipiell ist der Quelltext schon richtig. Das hier sieht aber schon einmal höchst verdächtig aus:
Petros hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| L1.Caption := IdHttp1.Get(Form2.Edit1.Text); der text inhalt wird aus einer ini datei geladen | |
Bist du sicher, dass das die richtige Instanz des Formulars ist? Was sagt denn der Debugger? Ist da vielleicht etwas nil? Und wo genau kommt die Exception? Auch, wenn du im Debugger auf das Editfeld zugreifst?
Sonst fehlt halt ein wenig mehr Quelltext, diese Zeile für sich allein ist korrekt...
colaka - Di 24.05.11 06:57
Hallo,
ich denke, da mußt Du wohl 2 Zeilen daraus machen:
Delphi-Quelltext
1: 2:
| L1.Caption := Form2.Edit1.Text; IdHttp1.Get(L1.caption); |
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Di 24.05.11 07:00
colaka hat folgendes geschrieben : |
L1.Caption := Form2.Edit1.Text;
IdHttp1.Get(L1.caption); |
Und das Ergebnis wirfst du einfach weg... was hat das für einen Sinn?
colaka - Di 24.05.11 07:38
Ok,
dann muß es wohl so heißen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Datei : TFilestream; begin L1.Caption := Form2.Edit1.Text; IdHttp1.Get(L1.caption, Datei); end; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Di 24.05.11 08:37
In eine Datei schreiben ist hier doch gar nicht nötig. Es stand doch schon von Anfang an prinzipiell richtig da... :roll:
Du übergibst die Adresse und bekommst das Ergebnis als Rückgabewert. Warum du die Adresse plötzlich in den Label zwischenspeichern willst und stattdessen das Ergebnis wegwirfst, ist mir nicht wirklich klar. :nixweiss:
Wie gesagt: Eigentlich war die Zeile korrekt, vorausgesetzt das Formular Form2 existiert in dieser globalen Variablen...
Petros - Di 24.05.11 16:07
ja form2 exestriert. In der Form2 sind mehrere edit felder ich zeige es mal anhand des codes
Form1
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.FormCreate(Sender: TObject); begin L1.Caption := IdHttp1.Get(Form2.Edit1.Text); L2.Caption := IdHttp2.Get(Form2.Edit2.Text); L3.Caption := IdHttp3.Get(Form2.Edit3.Text); L4.Caption := IdHttp4.Get(Form2.Edit4.Text); L5.Caption := IdHttp5.Get(Form2.Edit5.Text); L6.Caption := IdHttp6.Get(Form2.Edit6.Text); L7.Caption := IdHttp7.Get(Form2.Edit7.Text); L8.Caption := IdHttp8.Get(Form2.Edit8.Text); L9.Caption := IdHttp9.Get(Form2.Edit9.Text); end
procedure TForm1.FormShow(Sender: TObject); var ini: TIniFile; filename: string; begin filename := ExtractFilePath(ParamStr(0)) + 'address.ini'; ini := TIniFile.Create(filename); try form2.Edit1.Text := ini.ReadString('serveradressen', 'addresse1', ''); form2.Edit2.Text := ini.ReadString('serveradressen', 'addresse2', ''); form2.Edit3.Text := ini.ReadString('serveradressen', 'addresse3', ''); form2.Edit4.Text := ini.ReadString('serveradressen', 'addresse4', ''); form2.Edit5.Text := ini.ReadString('serveradressen', 'addresse5', ''); form2.Edit6.Text := ini.ReadString('serveradressen', 'addresse6', ''); form2.Edit7.Text := ini.ReadString('serveradressen', 'addresse7', ''); form2.Edit8.Text := ini.ReadString('serveradressen', 'addresse8', ''); form2.Edit9.Text := ini.ReadString('serveradressen', 'addresse9', ''); finally ini.Free; end; end; |
Form2
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm2.btn1Click(Sender: TObject); var ini: TIniFile; filename: String; begin ini.Free; filename := ExtractFilePath(ParamStr(0)) + 'address.ini'; ini := TIniFile.Create(filename); ini.WriteString('serveradressen', 'addresse1', Edit1.Text ); ini.WriteString('serveradressen', 'addresse2', Edit2.Text ); ini.WriteString('serveradressen', 'addresse3', Edit3.Text ); ini.WriteString('serveradressen', 'addresse4', Edit4.Text ); ini.WriteString('serveradressen', 'addresse5', Edit5.Text ); ini.WriteString('serveradressen', 'addresse6', Edit6.Text ); ini.WriteString('serveradressen', 'addresse7', Edit7.Text ); ini.WriteString('serveradressen', 'addresse8', Edit8.Text ); ini.WriteString('serveradressen', 'addresse9', Edit9.Text ); end; |
ich bekomme nur die meldung von oben
Debugger Not..... ausgabe
"Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 005FD919 in module 'project1.exe'. Read of address 000002F8'. Process stopped. Use Step or Run to continue."
und dann makiert er mir in Form1 L1.Caption := IdHttp1.Get(Form2.Edit1.Text); aber keine error meldung oder andere warnungen
Die ausgegeben daten in den label.Captions übertrage ich manuell in einer exel Datenbank. eigendlich sollte das so funktionieren zumindest laut meiner logik aber ich kann mich auch täuchen und irgendwo einen fehler drin haben
MDX - Di 24.05.11 16:30
Also mal eine Sache:
Wieso nutzt du NEUN Indy-Komponenten??
Und wenn es geht (also von deiner Programmfunktion her) würde ich dir raten EINMAL eine Seite mit allen Labelbeschriftungen abrufen und diese einfach mit einem speziellen Zeichen zu trennen (z.B. "|" oder ";") und dann einfach die Ausgabe via Explode (Einfach bei Google suchen) auszugeben, dann brauchst du keine 9 mal irgendeine Seite herunterladen....
Petros - Di 24.05.11 16:33
OK habe den fehler schon gefunden ich musste nur vom Form1.create und form1.show umtauschen damit funktioniert das dann auch....
MDX - Di 24.05.11 16:35
Ich meinte nicht die Version, sondern wieso du 9 Indy-Komponenten auf deine Form packst, bzw. in deinem Projekt benutzt und nicht einfach nur Eine? Damit kannst du auch alle Sachen nacheinander herunterladen...
Petros - Di 24.05.11 16:40
sry ich hatte mich verlesen gehabt und als ich grad mein text editieren wollte stand deins schon da ja das hatte ich mir auch schon überlegt alles über eine idhttp laufen zu lassen aber wie mache ich das???
die datein ändern sich alle stunde und alle 2 tage werden neue daten geschrieben deshalb lass ich sie ja alle gleichzeitig anzeigen. mir ist da kein besserer weg eingefallen früher habe ich die datein vom server per ftp geladen und manuell per editos ausgelesen aber das war mir zu umständlich..
glotzer - Di 24.05.11 16:51
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.FormCreate(Sender: TObject); begin L1.Caption := IdHttp1.Get(Form2.Edit1.Text); L2.Caption := IdHttp1.Get(Form2.Edit2.Text); L3.Caption := IdHttp1.Get(Form2.Edit3.Text); L4.Caption := IdHttp1.Get(Form2.Edit4.Text); L5.Caption := IdHttp1.Get(Form2.Edit5.Text); L6.Caption := IdHttp1.Get(Form2.Edit6.Text); L7.Caption := IdHttp1.Get(Form2.Edit7.Text); L8.Caption := IdHttp1.Get(Form2.Edit8.Text); L9.Caption := IdHttp1.Get(Form2.Edit9.Text); end |
was ist daran denn so schwer? :p
MDX - Di 24.05.11 16:52
Naja, du machst einfach statt idhtpp1.Get, idhttp2.get etc. immer nur idhttp1.get und löschst die anderen 8 Komponenten ;) hat exakt die gleiche Funktion, spart dafür z.B. auch Speicher (sollte es zumindest ^^) und falls mal ein Fehler ist, brauchst du nicht alle Komponenten anschauen ob der Client falsch ist oder so ;)
Petros - Di 24.05.11 16:53
ok ich werd gleich mal versuchen ich hatte immer angenommen das das so nicht geht das jeder abruf eine eigene koponete braucht...
MDX - Di 24.05.11 16:56
Nö ;)
Du kannst das ganze auch noch mit einer While-Schleife o.ä komprimieren (sollte funktionieren), wenn die Labelnamen und die Editfelder die gleiche Zahl haben...
Petros - Di 24.05.11 16:59
so habs mal versucht über eine idhttp laufen zu lassen aber da bekomm ich einen fehler ausgegeben
siehe bild im anhang
MDX - Di 24.05.11 17:06
Poste mal die Einstellungen von der Indy-Komponente...
Petros - Di 24.05.11 17:17
ich hoffe das ist das richtige was du meinst
siehe anhang bild
hier noch mal der ganze quelltext
Form1
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| unit Unit1;
interface
uses Windows, IniFiles, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
type TForm1 = class(TForm) IdHTTP1: TIdHTTP; L1: TLabel; L2: TLabel; L3: TLabel; L4: TLabel; L5: TLabel; L6: TLabel; L7: TLabel; L8: TLabel; L9: TLabel; button2: TButton; button3: TButton; procedure button2Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.button2Click(Sender: TObject); begin L1.Caption := IdHttp1.Get(Form2.Edit1.Text); L2.Caption := IdHttp1.Get(Form2.Edit2.Text); L3.Caption := IdHttp1.Get(Form2.Edit3.Text); L4.Caption := IdHttp1.Get(Form2.Edit4.Text); L5.Caption := IdHttp1.Get(Form2.Edit5.Text); L6.Caption := IdHttp1.Get(Form2.Edit6.Text); L7.Caption := IdHttp1.Get(Form2.Edit7.Text); L8.Caption := IdHttp1.Get(Form2.Edit8.Text); L9.Caption := IdHttp1.Get(Form2.Edit9.Text); end;
procedure TForm1.FormShow(Sender: TObject); var ini: TIniFile; filename: string; begin filename := ExtractFilePath(ParamStr(0)) + 'address.ini'; ini := TIniFile.Create(filename); try form2.Edit1.Text := ini.ReadString('serveradressen', 'addresse1', ''); form2.Edit2.Text := ini.ReadString('serveradressen', 'addresse2', ''); form2.Edit3.Text := ini.ReadString('serveradressen', 'addresse3', ''); form2.Edit4.Text := ini.ReadString('serveradressen', 'addresse4', ''); form2.Edit5.Text := ini.ReadString('serveradressen', 'addresse5', ''); form2.Edit6.Text := ini.ReadString('serveradressen', 'addresse6', ''); form2.Edit7.Text := ini.ReadString('serveradressen', 'addresse7', ''); form2.Edit8.Text := ini.ReadString('serveradressen', 'addresse8', ''); form2.Edit9.Text := ini.ReadString('serveradressen', 'addresse9', ''); finally ini.Free; end; end;
procedure TForm1.button3Click(Sender: TObject); begin form2.Show; end;
procedure TForm1.FormCreate(Sender: TObject); begin L1.Caption := IdHttp1.Get(Form2.Edit1.Text); L2.Caption := IdHttp1.Get(Form2.Edit2.Text); L3.Caption := IdHttp1.Get(Form2.Edit3.Text); L4.Caption := IdHttp1.Get(Form2.Edit4.Text); L5.Caption := IdHttp1.Get(Form2.Edit5.Text); L6.Caption := IdHttp1.Get(Form2.Edit6.Text); L7.Caption := IdHttp1.Get(Form2.Edit7.Text); L8.Caption := IdHttp1.Get(Form2.Edit8.Text); L9.Caption := IdHttp1.Get(Form2.Edit9.Text); end;
end. |
Form2
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| unit Unit2;
interface
uses Windows, Messages, IniFiles, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm2 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; button2: TButton; procedure button2Click(Sender: TObject); private public end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.button2Click(Sender: TObject); var ini: TIniFile; filename: String; begin filename := ExtractFilePath(ParamStr(0)) + 'address.ini'; ini := TIniFile.Create(filename); ini.WriteString('serveradressen', 'addresse1', Edit1.Text ); ini.WriteString('serveradressen', 'addresse2', Edit2.Text ); ini.WriteString('serveradressen', 'addresse3', Edit3.Text ); ini.WriteString('serveradressen', 'addresse4', Edit4.Text ); ini.WriteString('serveradressen', 'addresse5', Edit5.Text ); ini.WriteString('serveradressen', 'addresse6', Edit6.Text ); ini.WriteString('serveradressen', 'addresse7', Edit7.Text ); ini.WriteString('serveradressen', 'addresse8', Edit8.Text ); ini.WriteString('serveradressen', 'addresse9', Edit9.Text ); ini.Free; end;
end. |
jaenicke - Di 24.05.11 17:52
Häng am besten einfach einmal das Projekt insgesamt an, also die .pas, .dfm und .dpr Dateien als Zip-Archiv. Dann lässt sich das viel einfacher nachvollziehen...
Petros - Di 24.05.11 18:01
alle datein sind als zip gepackt und im anhang
Petros - Mo 06.06.11 16:12
Habs jetzt mit einem onTime event gelöst
danke für eure hilfe
MFG Petros
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!