Autor Beitrag
Matthias-K
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271

Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
BeitragVerfasst: So 24.12.06 17:49 
nabend,

ich hab folgendes problem:

ich hab ein progi, wo ich ne rechnung anlegen kann. beim neuanlegen kann ich es drucken. da klappt alles.

beim späteren aufrufen des ds kann ich nicht mehr drucken. das programm rennt ins nirvana. allerdings kann ich keinen fehler sehen. vieleicht erkennt ihr etwas.

hier mal ein auszug, wo ich den fehler vermute. bei bedarf kann ich auch auf anfrage hin den source schicken.

ausblenden volle Höhe 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:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
procedure tfrmauftrag.loadauftrag(id : integer);
  function dbempty(q : tzquery) : boolean;
  begin
    if q.eof and q.bof then
      result := true
    else
      result := false;
  end;
var
  a : integer; // zähler;
begin

  with qcheck do
  begin
    close;
    sql.clear;  //laden des rechnungskopfes
    sql.add('select * from rechnungskopf');
    sql.add('where re_rech_id = :w1');
    parambyname('w1').asinteger := id;
    try
      open;
    except
    end;
  end;

  flatedit1.text := inttostr(qcheck.fieldbyname('re_rech_id').asinteger);
  edit3.text := qcheck.fieldbyname('re_kundennummer').asstring;
  if (qcheck.fieldbyname('re_gedruckt').asinteger = 1then
    label9.visible := true
  else
    label9.visible := false;
  flatedit2.text := qcheck.fieldbyname('re_vorwahl').asstring;

  loadartikel(id);

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from ort');
    sql.add('where vorwahl = :w100');
    parambyname('w100').asstring := flatedit2.text;
    try
      open;
    except
    end;
  end;
  edit2.text := qcheck.fieldbyname('ort').asstring;

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from kunden');
    sql.add('where nummer = :w1');
    sql.add('and vorwahl = :w2');
    parambyname('w1').asstring := edit3.text;
    parambyname('w2').asstring := flatedit2.text;
    try
      open;
    except
    end;
  end;
  if not dbempty(qcheck) then
  begin
    label4.caption := qcheck.fieldbyname('name').asstring;
    label5.caption := qcheck.fieldbyname('strasse').asstring;
    label6.caption := qcheck.fieldbyname('hnr').asstring;
    label7.caption := qcheck.fieldbyname('bemerkung').asstring;
//    label8.caption := qcheck.fieldbyname
  end
  else
  begin
    messagedlg('Kundendaten nicht vorhanden. Kunde gelöscht.', mterror, [mbcancel],0);
  end;
end;

procedure tfrmAuftrag.loadartikel(id : integer);
  function dbempty(q : tzquery) : boolean;
  begin
    if q.eof and q.bof then
      result := true
    else
      result := false;
  end;
var
  a : integer;
  ergebnis : double;
begin
  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from rechnungszeile');
    sql.add('where rz_rech_id = :w1');
    parambyname('w1').asinteger := id;
    try
      open;
    except
      messagedlg('Fehler LOADARTIKEL',mterror, [mbcancel],0);
    end;
  end;

  strgliste.Clear;

  strgListe.cells[0,0] := 'Nummer';
  strgliste.cells[1,0] := 'Menge';
  strgListe.cells[2,0] := 'Bezeichnung';
  strgListe.cells[3,0] := 'E-Preis';
  strgListe.cells[4,0] := 'G-Preis';

  if not dbempty(qcheck) then
  begin
    qcheck.first;
    a := 0;
    strgliste.rowcount := qcheck.recordcount + 1;
    while not qcheck.eof do
    begin
      if not (qcheck.fieldbyname('rz_artikel_id').asstring = '-')
      and not (qcheck.fieldbyname('rz_artikel_id').asstring = '+'then
        ergebnis := (qcheck.fieldbyname('rz_menge').asinteger) * strtofloat(qcheck.fieldbyname('rz_epreis').asstring)
      else
        ergebnis := 0;

      strgliste.Cells[0,a+1] := qcheck.fieldbyname('rz_artikel_id').asstring;
      strgliste.cells[1,a+1] := inttostr(qcheck.fieldbyname('rz_menge').asinteger);
      strgliste.cells[2,a+1] := qcheck.fieldbyname('rz_beschreibung').asstring;
      strgliste.cells[3,a+1] := qcheck.fieldbyname('rz_epreis').asstring;
      strgliste.cells[4,a+1] := floattostr(ergebnis);
      inc(a);
      qcheck.next;
    end;
  end;
end;

procedure TfrmAuftrag.Button3Click(Sender: TObject);
begin
  newartikel := true;

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from rechnungskopf');
    sql.add('where re_rech_id = :w1');
    parambyname('w1').asinteger := strtoint(flatedit1.text);
    try
      open;
    except
      messagedlg('Fehler 2005',mterror, [mbcancel],0);
    end;
  end;

  if dbempty(qcheck) then
  begin
    with qcheck do
    begin
      close;
      sql.clear;
      sql.add('insert into rechnungskopf');
      sql.add('values (:id, :nr, :time, :druck, :vorw)');
      parambyname('id').asinteger := strtoint(flatedit1.text);
      parambyname('nr').asstring := edit3.text;
      parambyname('time').asstring := datetimetostr(now);
      parambyname('druck').asinteger := 0;
      parambyname('vorw').asstring := flatedit2.text;
      try
        execsql;
      except
        MessageDlg(Exception(ExceptObject).Message,mtError,[mbCancel],0);
      end;
    end;
  end;

  if not (edit9.text = '-'and not (edit9.text = '+'then
  begin
    with qupdate do
    begin
      close;
      sql.clear;
      sql.add('select steuer from artikel');
      sql.add('where nummer = :w1');
  //    sql.add('and name = :w2');
      parambyname('w1').asstring := edit9.text;
      try
        open;
      except
        MessageDlg(Exception(ExceptObject).Message,mtError,[mbCancel],0);
      end;
    end;
  end;

  if not (edit9.text = '-'and not (edit9.text = '+'then
  begin
    with qcheck do
    begin
      close;
      sql.clear;
      sql.add('insert into rechnungszeile');
      sql.add('values (:id, :art, :menge, :preis, :bes, :steu, :gpreis)');
      parambyname('id').asinteger    := strtoint(flatedit1.text);
      parambyname('art').asstring    := edit9.text;
      parambyname('menge').asinteger := strtoint(edit10.text);
      parambyname('preis').asstring  := edit12.text;
      parambyname('bes').asstring    := edit11.text;
      parambyname('steu').asinteger  := 7;
      parambyname('gpreis').asfloat  := strtofloat(edit13.text);
      try
        execsql;
      except
        MessageDlg(Exception(ExceptObject).Message,mtError,[mbCancel],0);
      end;
    end;
  end
  else
  begin
    with qcheck do
    begin
      close;
      sql.clear;
      sql.add('insert into rechnungszeile');
      sql.add('values (:id, :art, :menge, :preis, :bes, :steu, :gpreis)');
      parambyname('id').asinteger    := strtoint(flatedit1.text);
      parambyname('art').asstring    := edit9.text;
      parambyname('menge').asinteger := 1;//strtoint(edit10.text);
      parambyname('preis').asstring  := edit12.text;
      parambyname('bes').asstring    := edit11.text;
      parambyname('steu').asinteger  := 7;
      parambyname('gpreis').asfloat  := strtofloat(edit12.text);//strtofloat(edit13.text);
      try
        execsql;
      except
        MessageDlg(Exception(ExceptObject).Message,mtError,[mbCancel],0);
      end;
    end;
  end;

  LoadArtikel(strtoint(flatedit1.text));
  edit9.setfocus;
end;

procedure TfrmAuftrag.edit9Enter(Sender: TObject);
begin
  if not newartikel then
  begin
    with qcheck do
    begin
      close;
      sql.clear;
      sql.add('select * from kunden');
      sql.add('where nummer = :w1');
      sql.add('and vorwahl = :w2');
      parambyname('w1').asstring := edit3.text;
      parambyname('w2').asstring := flatedit2.text;
      try                                  //187634
        open;
      except
        MessageDlg(Exception(ExceptObject).Message,mtError,[mbCancel],0);
      end;
    end;
    if dbempty(qcheck) then
    begin
      frmAuftragKundenNeu.edit1.text := edit3.text;
      frmauftragkundenneu.vorwahl := flatedit2.text;
      frmauftragkundenneu.ort := edit2.text;
      if frmAuftragKundenNeu.ShowModal = mrcancel then
      begin
        //edit3.clear;
        edit3.setfocus;
      end;
    end
    else
    begin
      // kundendaten in die labels eintragen.
      label4.caption := qcheck.fieldbyname('name').asstring;
      label5.caption := qcheck.fieldbyname('strasse').asstring;
      label6.caption := qcheck.fieldbyname('hnr').asstring;
      label7.caption := qcheck.fieldbyname('bemerkung').asstring;
      with qprint do
      begin
        close;
        sql.clear;
        sql.add('select * from strasse');
        sql.add('where name = :w1');
        sql.add('and ort = :w2');
        parambyname('w1').asstring := label5.caption;
        parambyname('w2').asstring := edit2.text;
        try
          open;
        except
          messagedlg('fehler 2', mterror, [mbcancel],0);
        end;
      end;
      label8.caption := qprint.fieldbyname('koordinate').asstring;
    end;
  end
  else
  begin
    edit9.clear;
    edit10.clear;
    edit11.clear;
    edit12.clear;
    edit13.clear;
    edit9.setfocus;
  end;
end;

procedure TfrmAuftrag.Button4Click(Sender: TObject);
var
  filepath : string[255];
  a,b,c : double;
  d,e,f : integer;
  steuer1, steuer2 : string;
begin
  // steuer gesammt für steuersatz 1.
  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('update rechnungskopf');
    sql.add('set re_gedruckt = 1');
    sql.add('where re_rech_id = :w1');
    parambyname('w1').asinteger := strtoint(flatedit1.text);
    try
      execsql;
    except
      messagedlg('test1',mterror, [mbcancel],0);
    end;
  end;

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from firma');
    try
      open;
    finally
      showmessage('firma: '+inttostr(qcheck.recordcount));
    end;
  end;
  steuer1 := qcheck.fieldbyname('steuer1').asstring;
  steuer2 := qcheck.fieldbyname('steuer2').asstring;

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from rechnungszeile');
    sql.add('where rz_rech_id = :w1');
    sql.add('and rz_steuer = :w2');
    parambyname('w2').asinteger := strtoint(steuer1);
    parambyname('w1').asinteger := strtoint(flatedit1.text);
    try
      open;
    finally
      showmessage('rechnungszeile 1: '+inttostr(qcheck.recordcount));
    end;
  end;

  qcheck.first;
  a := 0;
  while not qcheck.eof do
  begin
    a := a + qcheck.fieldbyname('rz_gpreis').asfloat;
    qcheck.next;
  end;

  a := a * (strtoint(steuer1)/100);

//  messagedlg(floattostr(a),mtinformation, [mbok],0);

// berechnung des 2. steuersatzes

  with qcheck do
  begin
    close;
    sql.clear;
    sql.add('select * from rechnungszeile');
    sql.add('where rz_rech_id = :w1');
    sql.add('and rz_steuer = :w2');
    parambyname('w2').asinteger := strtoint(steuer2);
    parambyname('w1').asinteger := strtoint(flatedit1.text);
    try
      open;
    except
    end;
  end;

  qcheck.first;
  b := 0;
  while not qcheck.eof do
  begin
    b := b + qcheck.fieldbyname('rz_gpreis').asfloat;
    qcheck.next;
  end;

  b := b * (strtoint(steuer2)/100);

//  messagedlg(floattostr(a),mtinformation, [mbok],0);



  with qprint do
  begin
    close;
    sql.clear;
    sql.add('delete from dummy');
    try
      execsql;
    except
      messagedlg('test',mterror, [mbcancel],0);
    end;
  end;

  // berechnung zur einzelnen steuer.

  with qprint do
  begin
    close;
    sql.clear;
    sql.add('insert into dummy');
    sql.add('values(:w1,:w2,:w3,:w4,:w5,:w6,:w7)');
    parambyname('w1').asstring := flatedit2.text;
    parambyname('w2').asinteger := strtoint(flatedit1.text);
    parambyname('w3').asdate := now;
    parambyname('w4').asstring := edit3.text;
    parambyname('w5').asstring := '';
    parambyname('w6').asstring := floattostr(a);
    parambyname('w7').asstring := floattostr(b);
    try
      execsql;
    except
      messagedlg('fehler bei rechnung',mterror,[mbcancel],0);
    end;
  end;

  filepath := extractfilepath(application.exename);
  filepath := IncludeTrailingBackslash(filepath);
  filepath := filepath + 'reports/rechnung.qr2';
  reportdesignerdialog1.editReport(filepath);//   EditReport(filepath);
//  reportdesignerdialog1.NewReport(filepath,true);

end;



so, das sind die einzigen proceduren, wo ein fehler sein kann.

beim anlegen oder bearbeiten des auftrages wird festgelegt, ob auftragneu = true oder nicht.

ich hoffe, es findet jemand hier etwas.

mfg matthias

_________________
Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!