![]() |
Datenbank: Oracle • Version: ??? • Zugriff über: Sql-String
DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletzung
Liebe Experten,
ich benutze einen netzwerkdrucker, schon gemappt. gleich bei
Delphi-Quellcode:
schreibt oben erwähnte Fehlermeldung : "Zugriffsverletzung bei Adresse 004..."
drucker.BeginDoc;
woran kann das liegen? :wall: :wall: bitte um eure antworten! :oops:
Delphi-Quellcode:
procedure TfrmMain.btnPrintUsersClick(Sender: TObject);
var sName, SQL, sRole, sUSR_Nr, sDSC, sACTIVE_DT :String; iCount:Integer; drucker : TPrinter; zeile_im_grid, gedruckte_zeile : Integer; zeilenhoehe, position_in_zeile : Int64; spalte_im_grid : Integer; my_rect : TRect; rueckgabe : Integer; abstand,i, gesamtbreite : Integer; spaltenbreite : Array Of Integer; begin TRY drucker.BeginDoc; drucker.Title := 'Liste der aktiven Benutzer in BAForms'; drucker:=TPrinter.Create; drucker.Canvas.Font.Name:='Arial'; drucker.Canvas.Font.Size:=8; drucker.Canvas.Font.Color:=clBlack; drucker.Orientation:= poPortrait; abstand:=Round(45/1171*drucker.canvas.TextWidth('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')); drucker.canvas.textout(100,-100,drucker.Title); { for spalte_im_grid:=0 TO DM.qry1.RecordCount-1 DO begin sRole := DM.qry1.Fields[0].AsString; sUSR_Nr := DM.qry1.Fields[1].AsString; sACTIVE_DT := DM.qry1.Fields[2].AsString; sDSC := DM.qry1.Fields[3].AsString; sName := DM.qry1.Fields[4].AsString; end; } // statusbar1.Panels[2].Text:='Drucken ... (Zeile '+IntToStr(zeile_im_grid)+' von '+IntToStr(DM.qry1.RecordCount)+')'; Application.ProcessMEssages; drucker.Canvas.Font.Style:=drucker.Canvas.Font.Style+[fsBold]; //inc(zeile_im_grid); drucker.EndDoc; drucker.Free; EXCEPT on E: EDatabaseError do ShowMessage(E.Message); ELSE Application.MessageBox('Drucken fehlgeschlagen!', 'Fehler!'); END; end; |
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
Lass die Variablendeklaration für drucker weg und ersetze drucker durch Printer.
|
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
Zitat:
jetzt bekomme ich die fehlermeldung "Drucker läuft" und gezeigt ist auf diese zeile:
Delphi-Quellcode:
:wall:
abstand:=Round(45/1171*Printer.canvas.TextWidth('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'));
|
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
Zitat:
|
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
Steht die Zeile mit TPrinter.Create noch drin? Die muss auch raus (hatte ich vorhin übersehen).
[edit] Zur Erklärung ein Zitat aus der Hilfe: Zitat:
|
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
scheisse, und heute ist die abgabe:
es schreit noch immer bei
Delphi-Quellcode:
"Druckvorgang läuft!" :wall:
Printer.BeginDoc;
ich habe Printer.Create auch weggetan. wenn ich
Delphi-Quellcode:
auch weg tue, was eh blöd ist, bekomme ich dann " Der Drucker druckt aktuell nicht" :wall:
Printer.BeginDoc;
was soll ich bloss machen?? :roll: ich muss einen Grid einfach an drucker schicken. :wall: |
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
Man müsste mal den kompletten aktuellen Source sehen. Aber abgesehen davon wäre es doch IMHO sinnvoller, nicht das Grid auszudrucken, sondern die enthaltene Datenmenge. Das kann von Hand geschehen oder über ein Reportingtool wie Rave, Quickreport, FastReport etc.
|
Re: DBGrid direkt an Drucker schicken-Fehler:Zugriffsverletz
ok, so weit dass was gedrückt wird, habe ich geschaft, nur der hört bei seitenende nicht auf zu drücken.
vielleicht könntet ihr meine fehler finden: danke
Delphi-Quellcode:
procedure TfrmMain.btnPrintUsersClick(Sender: TObject);
var sName, SQL, sRole, sUSR_Nr, sDSC, sACTIVE_DT, sDate :String; PageWidth,PageHeight, cv, vv, cc: Integer; P, I, J, YPos, XPos, HorzSize, VertSize: Integer; zeile, x, y: integer; breite, hoehe, randlinks, randoben,wievielgedruckt: integer; iCount:Integer; zeile_im_grid, gedruckte_zeile : Integer; zeilenhoehe, position_in_zeile : Int64; spalte_im_grid : Integer; my_rect : TRect; rueckgabe : Integer; spaltenbreite : Array Of Integer; mmx, mmy: Extended; Footer: string; AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer; begin //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; wievielgedruckt := 0; sDate := DateToStr(date()); Printer.Orientation := TPrinterOrientation(poPortrait); Printer.BeginDoc; //Druck auf mm einstellen mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4; mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4; VertSize := Trunc(mmy) * 10; HorzSize := Trunc(mmx) * 10; SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); try Printer.Title:='Benutzerliste'; Printer.Canvas.Font.Name:='Arial'; Printer.Canvas.Brush.Color:=clwhite; Printer.Canvas.Font.Height:=50; Printer.Canvas.Font.Style := [fsBold]; Printer.Canvas.TextOut(1500, -300, 'Datum:'); Printer.Canvas.TextOut(1650, -300, sDate); Printer.Canvas.TextOut(500, -350,'Liste der aktiven Benutzer in BAForms'); Printer.Canvas.TextOut(495, -400,'---------------------------------------------------------'); //Spalten-name platzieren //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if DM.tblUsr.RecordCount mod Zeilen <> 0 then AnzSeiten := DM.tblUsr.RecordCount div Zeilen + 1 else AnzSeiten := DM.tblUsr.RecordCount div Zeilen; Seite := 1; // Daten aus datenbank lesen - aktive benutzer DM.tblUsr.Filter:= 'ACTIVE_Q <> ' + QuotedStr('0'); DM.tblUsr.Filtered := True; spalte_im_grid := -700; Printer.Canvas.Font.Style := []; Printer.Canvas.Font.Height:=40; //DM.tblUsr.RecordCount-1 //seitennummerierung Printer.Canvas.TextOut(100, -600 ,'Username'); Printer.Canvas.TextOut(100, -650 ,'-------------'); Printer.Canvas.TextOut(400, -600 ,'Name'); Printer.Canvas.TextOut(400, -650 ,'-------------'); Printer.Canvas.TextOut(900, -600 ,'Rolle'); Printer.Canvas.TextOut(900, -650 ,'----------'); Printer.Canvas.TextOut(1100, -600 ,'Aktiviert am'); Printer.Canvas.TextOut(1100, -650 ,'----------------'); //Grid Drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Printer.Title) div 2)), - 20,Printer.Title); Printer.Canvas.Pen.Width := 5; Printer.Canvas.MoveTo(0, - HeaderSize); Printer.Canvas.LineTo(HorzSize, - HeaderSize); //Fußzeile Printer.Canvas.MoveTo(0, - VertSize + FooterSize); Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + IntToStr(AnzSeiten); Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)), - VertSize + 150,Footer); //Zeilen drucken Printer.Canvas.Font.Height := FontHeight; YPos := HeaderSize + 10; for I := 1 to Zeilen do begin if DM.tblUsr.RecordCount >= I + (Seite - 1) * Zeilen then begin sUSR_Nr := DM.tblUsr.Fields[0].AsString; sName := DM.tblUsr.Fields[1].AsString; sRole := DM.tblUsr.Fields[2].AsString; sACTIVE_DT := DM.tblUsr.Fields[4].AsString; sDSC := DM.tblUsr.Fields[15].AsString; Printer.Canvas.TextOut(100, spalte_im_grid , sName); Printer.Canvas.TextOut(400, spalte_im_grid, sDSC); Printer.Canvas.TextOut(900, spalte_im_grid , sRole); Printer.Canvas.TextOut(1100, spalte_im_grid , sACTIVE_DT); wievielgedruckt := wievielgedruckt +1; spalte_im_grid := spalte_im_grid -40; DM.tblUsr.Next; end; end; Inc(Seite); if Seite <= AnzSeiten then begin Printer.NewPage; spalte_im_grid := -200; Printer.Canvas.TextOut(100, -200 ,'Username'); Printer.Canvas.TextOut(100, -250 ,'-------------'); Printer.Canvas.TextOut(400, -200 ,'Name'); Printer.Canvas.TextOut(400, -250 ,'-------------'); Printer.Canvas.TextOut(900, -200 ,'Rolle'); Printer.Canvas.TextOut(900, -250 ,'----------'); Printer.Canvas.TextOut(1100, -200 ,'Aktiviert am'); Printer.Canvas.TextOut(1100, -250 ,'----------------'); end; end; Printer.EndDoc; Printer.Free; EXCEPT on E: EDatabaseError do ShowMessage(E.Message); ELSE Application.MessageBox('Drucken fehlgeschlagen!', 'Fehler!'); END; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz