Print und DatenBanken solutions?!

ilovemygirl

Grünschnabel
Erst ma Hi alltogether,

Ich hab paar Fragen bezüglich drücken und Datenbanken
1)Ich hab einen folgenden Quelltext zum drucken
.

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Printers;
.
Procedure drucken (sender:tobject) <--------diese Zeile verursacht einen Fehler:Unit1.pas(83):Ungenügende Forward- oder External-Deklaration 'print'

var


Weiss vielleicht einer wo das Problemm ist, denn sonst geht das Drucken nicht!


2)Das andere sieht ungefahr so aus:

Stellt euch vor 3 Eingabetypen: Name, Adresse, Nummer und ein Listbox wo das alles eingetragen wird.

Beim auswahlen aus dieser Listbox soll das ausgewahlter Datensatz in einem neuen Fenster zum Formatieren zu verfugung stehen. Und die Frage: wie geht das uber die Datenbanken und wenn ja dann wie?!

3)Bevor das Programm startet soll ein info Fenster automatisch erscheinen, und wusste jetzt leider nicht wie das gehen soll.

Danke fur die Hilfe im Voraus
 
Zu 1.:Ich frage mich, woher Delphi das Wort Print hat?! Sowieso, hast du schon einmal selbst eine Prozedur geschrieben? Allein aus den paar Zeilen werde ich persönlich nicht schlau.

Auch bei 2. hab ich leichte Probleme, dich zu verstehen. Du möchtest in einer Listbox Einträge auswählen können, die du dann in einem neuen Fenster öffnest? Dann kannst du mit einer zweiten Form arbeiten, es kommt drauf an, wie du die Daten speicherst, dementsprechend musst du auch die Codes anpassen.

Bei 3. ist es so, dass Delphi zum einen MessageDlg(), zum anderen Showmessage() gibt. Die Hilfe wird sicher sehr aufschlussreich sein.

Ansonsten hoffe ich, dass irgendjemand noch mehr helfen kann, so groß ist meine Hilfe ja nicht, aber vielleicht kann ich mit ein paar mehr Hinweisen auch noch mehr sagen.

lg Hellie
 
thx for timing :)

Zu 1) sieht mein Code so aus:

Code:
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
If Printdialog1.execute then
	Begin
	For CopyNum:=1 to printdialog1.copies do
		Begin
		X:=0;Ctr:=0;
//Drucken beginnen
		Printer.BeginDoc;

//
		PHeight:=printer.pageheight;

//Formatierung ubernamene aus dialog
		printer.canvas.font:=fontdialog1.font;

//Berechnen der Zeilen/Seiten aus schriftart
		LinesPerPage:=Pheight div(round (abs(FontDialog1.font.height)*3.5));

//Berechnen des Zei.lenabstands
LineSpace:=Pheight DIV LinesPerPage;

// Ubernehme die Seite die  ausgedruckt werden soll

		PageNum:=inttostr(Printer.pageNumber);
		Seek(Datei,0);
	While not eof (Datei) do;
	Begin
	For i:=1 to filesize(Datei) do
		Begin
Seek(Datei,i-1);
Read(datei,angabe);
Printer.canvas.textOut(100,500+x,angabe.name) ;
X:=X+LineSpace;
Ctr:=Ctr+1;
If ctr > Linesperpage-1 then
	Begin
	Printer.newpage;
	X :=0 ; Ctr :=0 ;
PageNum :=inttostr(Printer.pagenumber);
			End;
End;
End;
	Printer.enddoc;


end;
end;
end;
ich denke, dass Sachen wie Angabe... muessen zuerst neuanleget werden oder so, weiss ich nicht :)


2)Zweitens hast du richtig verstanden, aber das mit speichern hab ich noch nicht gemacht, ich will es mit Hilfe von Arrays zu erledigen, bringt dich das wieter?!
 
Zuletzt bearbeitet von einem Moderator:
Also bei 1. kann ich dir leider nicht genau sagen, woran es liegt. Ist der Fehler noch derselbe? Die Prozedur, die du im ersten Post genannt hattest, finde ich irgendwie nicht? Wenn es immernoch die "ungenügende Deklakartion" ist, liegt der Fehler weiter oben im "Kopf", nämlich bei den Prozeduren von TForm1.

Bei dem zweiten: Ich geh mal davon aus, das beide Texte aus einem Projekt stammen und du ein File benutzt. Das in ein Array zu übergeben, ist schon mal sehr gut, wenn sich das Programm aufhängt oder so, immer das Array nur als File abspeichern wenn der Benutzer das will. Das macht wohl jeder anders, meine bevorzugte Variante wäre wohl (ohne das Problem zu kennen), den Datensatz, den du bearbeiten willst, als Variable zu speichern, in Form2 zu laden, und wenn der Benutzer bestätigt, die Änderungen übernehmen, also den "alten" Datensatz überschreiben. Hilft dir das weiter?

lg Hellie

PS: Der Text ist wahrscheinlich etwas konfus, entschuldige bitte, ich hoffe, man versteht in trotzdem. Is halt noch früh...*gähn*
 
Danke Helli,

1)Beim dreucken erscheint das print Dialog Fenster,
Schritt2 klickst auf 'OK' , es wird nichts gedrueckt!

2) Das problemm ist aber, dass es ohne zuseatzlichen Abspeichern gehen soll, sprich du weahlst in der Listbox was aus, klickst auf bearbeiten. Schritt2 neues Formblatt(Form2), dort kannst die Sachen eandern.
 
-

Guten Tag zusammen,
leider muss ich gleich als erstes dir, ilovemygirl, eine kleine Standpauke verpassen, deine Posts sind nicht sehr ansprechend, lies dir doch bitte ein mal unsere hart erarbeitete Netiquette durch.
Danke ;)


So jetzt zu deinem Problem:
Als genereller Tipp solltet ihr euch angewöhnen, Formulare und entsprechende Komponenten nur zum Darstellen von Informationen zu benutzen und nicht zum Speichern. Ich weiß, es verleitet schnell, mehrere Strings in einer ListBox zu speichern, aber bei deinem Problem sieht man, wofür die Trennung von Darstellung und Speicherung der Daten hilfreich sein kann.
Erstell dir eine weitere Unit - formularlos - in der du per TList oder ähnlichem deine Daten speicherst. Wenn du dann deine Daten in einem anderen Formular bearbeiten willst, brauchst du dir die Daten nur noch aus der neuen Unit holen.
Ist sauberer Programmierstil und erleichtert dir die Fehlersuche.

Gruß Patrick

Und vergiss die Netiquette nicht
 
one more

komischer Weise geht auch das abspeichern nicht oder offnen, ich bin verwirt: Ich speichere durch den folgenden code:

if saveDialog1.Execute then begin
for i:=1 to filesize(datei) do begin
seek(Datei, i-1) ;
write(datei, angabe);
end;
end;


Offnen durch:

if openDialog1.Execute then begin //open
AssignFile(datei , openDialog1.FileName) ;
reset(Datei);
end;


if not eof(Datei) then begin
for i:=1 to filesize(Datei) do begin
seek(Datei, i-1);
read(Datei, angabe);
Listbox1.Items.add(book)
end;
end;


Eins oder beide gehen nicht, weiss einer was falsch ist?!
 
Zurück