Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Invalid variant operation (https://www.delphipraxis.net/111867-invalid-variant-operation.html)

Test0r79 10. Apr 2008 19:56


Invalid variant operation
 
Also das ganze sieht folgendermaßen aus:
Ich schicke von eimem Client eine Nachricht los, die wird auf dem Client (zT hier zu sehen) verarbeitet &gespeichert und eine Antwort zurückgesendet. Jedoch tritt bei jedem Senden vom Client "Invalid variant operation" als Fehler auf und er führt nicht das geplante aus.


Delphi-Quellcode:
type TClientNachricht = Record
        Betrag:    extended;
        Kundennr:  Integer;
        Absender:  string[255];
  end;

type TClientAntwort = Record
        Absender:    string[255];
        Existent:    boolean;
        Abgedeckt:   boolean;
        Sperre:      boolean;
        Zeit:        string[255];
        Betrag:      extended;
        Kundennr:    Integer;
  end;


Delphi-Quellcode:
procedure TServer.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TClientNachricht;
    Einträge: Integer;
    Antwort : TClientAntwort;
begin

  // Nachricht empfangen
  Socket.ReceiveBuf(Nachricht, SizeOf(Nachricht));

  // In Excel Tabelle eintragen
  try
  Excel.Worksheets[InttoStr(Nachricht.Kundennr)].Activate;
  Antwort.Existent := true;
  except
  Antwort.Existent := false;
  end;
  Antwort.Abgedeckt := false;


  if Antwort.Existent = true then
  begin
    Einträge := StrToInt(Excel.Cells[1,1]);
    if StrToFloat(Excel.Cells[1+Einträge,6]) - Betrag >= 0 then
    begin
      // Eintragen am Server (Stringgrid
      sgAktuell.Cells[0,sgAktuell.RowCount-1] := InttoStr(Nachricht.Kundennr);
      sgAktuell.Cells[1,sgAktuell.RowCount-1] := FloatToStr(Nachricht.Betrag);
      sgAktuell.Cells[2,sgAktuell.RowCount-1] := TimeToStr(Time);
      sgAktuell.Cells[3,sgAktuell.RowCount-1] := Nachricht.Absender;

      sgAktuell.RowCount := sgAktuell.RowCount+1;

      //Eintrag in Excel
      Excel.Cells[1,1] := IntToStr(Einträge+1);
      Excel.Cells[2+Einträge,2] := IntToStr(Einträge+1);
      Excel.Cells[2+Einträge,3] := TimeToStr(Time);
      Excel.Cells[2+Einträge,4] := Nachricht.Absender;
      Excel.Cells[2+Einträge,5] := FloatToStr(Nachricht.Betrag);
      Excel.Cells[2+Einträge,6] := FloatToStr((StrToFloat(Excel.Cells[1+Einträge,6]) - StrToFloat(Excel.Cells[2+Einträge,5])));

      Antwort.Abgedeckt := true;
    end;

  end;

  if Excel.Cells[8,7] = 'Ja' then
        Antwort.Sperre := true
      else
        Antwort.Sperre := false;

  Antwort.Betrag := Nachricht.Betrag;
  Antwort.Kundennr := Nachricht.Kundennr;
  Antwort.Absender := 'Server';
  Antwort.Zeit := TimeToStr(Time);
  Socket.SendBuf (Antwort, SizeOf(Nachricht));
end;
habe im Netz auch nichts darüber gefunden was die "Invalid variant operation" genau aussagen soll.
Danke im vorraus, Test0r79

Der.Kaktus 10. Apr 2008 20:00

Re: Invalid variant operation
 
Hallo erstmal und Willkommen in der :dp:

hier gibt es eine Suchfunktion..da findest Du sicher den Fehler in Deiner Anwendung Hier im Forum suchenexcel worksheets

Test0r79 10. Apr 2008 20:17

Re: Invalid variant operation
 
Danke fürs Hallo sagen :)

Also mit deinem Tip hast mich ja fast direkt zu der folgenden Zeile geführt:
Delphi-Quellcode:
Excel.Worksheets[InttoStr(Nachricht.Kundennr)].Activate;
jedoch finde ich nichts was in der Richtung einen fälschlichen Sinn ergibt, so wie ich es geschrieben habe.

Der.Kaktus 10. Apr 2008 20:23

Re: Invalid variant operation
 
Zitat:

Zitat von Test0r79
Danke fürs Hallo sagen :)

Also mit deinem Tip hast mich ja fast direkt zu der folgenden Zeile geführt:
Delphi-Quellcode:
Excel.Worksheets[InttoStr(Nachricht.Kundennr)].Activate;
jedoch finde ich nichts was in der Richtung einen fälschlichen Sinn ergibt, so wie ich es geschrieben habe.

Ihr muesst auch mal weiterlesen und besonders intensiver ;-) ....OLE Excel

Test0r79 10. Apr 2008 20:35

Re: Invalid variant operation
 
Also workbook und worksheet sind ja schon vorhanden. Es wird sozusagen an der vorhanden Tabelle weitergeschrieben...

aber wenn ich es so wie dort beschrieben versuche:
Delphi-Quellcode:
Excel.Sheets[Nachricht.Kundennr].Cells[2+Einträge,2].Value := IntToStr(Einträge+1);
bekomme ich nur die volle Ladung an excessviolations im OLE string support. Auch ist Excel richtig eingebunden.

Der.Kaktus 10. Apr 2008 20:43

Re: Invalid variant operation
 
Zitat:

Zitat von Test0r79
Also workbook und worksheet sind ja schon vorhanden. Es wird sozusagen an der vorhanden Tabelle weitergeschrieben...

aber wenn ich es so wie dort beschrieben versuche:
Delphi-Quellcode:
Excel.Sheets[Nachricht.Kundennr].Cells[2+Einträge,2].Value := IntToStr(Einträge+1);
bekomme ich nur die volle Ladung an excessviolations im OLE string support. Auch ist Excel richtig eingebunden.


Die Anzahl der Eintraege in einer Excel Tabelle solltest Du mit OLE auslesen!

Es gibt noch andere Hilfen fuer OLE mit Excel..siehe Hier im Forum suchenOLE Excel in 5 Minuten ist so ein Projekt nicht zu loesen.

Test0r79 10. Apr 2008 20:52

Re: Invalid variant operation
 
Delphi-Quellcode:
24   Eintrag ID   Zeit   Absender   Betrag   Guthaben
   1   00:00   Server   0   100
   2   12:00   Supermarkt   14,00   86,00
   3   12:00   Supermarkt   11,00   75,00
   4   12:00   Supermarkt   11,00   64,00
so ist die Tablle aufgebaut, wobei ich nun nicht verstehe, warum ich die Einträge zählen sollte, wenn ich oben link die aktuelle Zeilenzahl "mitlaufen" lass um diese dann zu beschreiben. Ich greife ja nicht auf eine Zelle zu die nicht vorhanden ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz