Thema: Delphi MSSQL Fehler

Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#1

MSSQL Fehler

  Alt 26. Okt 2022, 07:57
Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDAC
Hallöle...

Ich habe ein Tool was 365/24 läuft. In diesem Tool gibt es "Module". Beim Start des Tools werden verschiedene Connections (verschiedene DB) erstellt. Die Module verwenden die Connection die benötigt wird.

Sporadisch kommt es bei einem Modul zu folgenden Fehlern:
Zitat:
Error Module: Import der Avis - [FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0]TCP-Anbieter: Ein Socketvorgang konnte nicht ausgeführt werden, da dem System Pufferspeicher fehlte oder eine Warteschlange voll war.
...danach
Zitat:
Error Module: Import der Avis - [FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0]TCP-Anbieter: Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.
Der Quelltext (DB Zugriff) ist von einem Kollegen "verzapft" worden. Auch wenn ich manche Sachen anders gemacht hätte, ist da nichts wirklich auffälliges.
Delphi-Quellcode:
// Work
function TModuleImportMailDatabase.GetWriteLastBelNumber:string;
var
  Qry: TFDQuery;
  FBelNumber: string;
begin
  Qry := CreateQuery;
  try
    Qry.SQL.Add(GetSQLByName('MODULE_IMPORT_MAIL_GET_BELART_LAST_NUMBER'));
    Qry.Open;
    if not Qry.Eof then
    begin
      FBelNumber := Qry.FieldByName('BelNummer').AsString;
      FBelNumber := IntToStr(StrToInt(FBelNumber) +1);
      Qry.Edit;
      Qry.FieldByName('BelNummer').AsString := FBelNumber;
      Qry.Post;
    end
    else
      FBelNumber := '';
  finally
    result := FBelNumber;
    Qry.Close;
    Qry.Free;
  end;
end;

function TModuleImportMailDatabase.IsDataAvailable(AuftragNr: string; FilialNr: string): boolean;
var
  Qry: TFDQuery;
  FSQL: string;
begin
  Qry := CreateQuery;
  try
    FSQL := GetSQLByName('MODULE_IMPORT_MAIL_IS_DATA_AVAILABLE');
    FSQL := StringReplace(FSQL, ':AUFNR', QuotedStr(AuftragNr), [rfIgnoreCase]);
    FSQL := StringReplace(FSQL, ':FILNR', QuotedStr(FilialNr), [rfIgnoreCase]);
    Qry.SQL.Add(FSQL);
    Qry.Open;
    if Qry.Eof then
      result := false
    else
      result := true;
  finally
    Qry.Close;
    Qry.Free;
  end;
end;

procedure TModuleImportMailDatabase.Write(Receipt: TSEAMTaskReceiptHead; var DatenOK: boolean);
var
  Qry: TFDQuery;
  FBelNumber: string;

  function MaxLength(Value: string; Laenge: Integer): string;
  begin
    Result := Value;
    if Length(Result) > Laenge then
    begin
      Result := Copy(Result, 1, Laenge);
    end;
  end;

begin
  Qry := CreateQuery;
  DatenOK := false;
  try
    //erst nachsehen, ob daten schon da
    if not IsDataAvailable(Receipt.STÖAuftragsNr, Receipt.STFilialNr) then
    begin

      Qry.SQL.Text := GetSQLByName('MODULE_IMPORT_MAIL_RECEIPT_INSERT');

      FBelNumber := '';
      FBelNumber := GetWriteLastBelNumber;
      Qry.ParamByName('pBelNummer').DataType := ftString;
      Qry.ParamByName('pBelNummer').AsString := FBelNumber;
...
      Qry.ParamByName('pAddDate').DataType := ftDateTime;
      Qry.ParamByName('pAddDate').Value := Receipt.AddDate; // D now
      Qry.ExecSQL;
      DatenOK := True;
    end;
  finally
    Qry.Free;
  end;
end;
PS: Speicher in der Größe ist immer stabil.
PS: https://social.technet.microsoft.com...dowsserver16de...is das Einzige was ich gefunden habe. Ob das damit zu tun hat?

...hat jemand Ideen?

Danke.

Geändert von haentschman (26. Okt 2022 um 08:03 Uhr)
  Mit Zitat antworten Zitat