Gespeicherte Procedur

PeterW

Benutzer
Beiträge
12
Hallo und guten Tag!
Ich muss einmal sagen dass das mein erster Versuch ist, eine SQL Server Datenbank zu erstellen.
Server SQL Express 2019
Frontend Access 2013.
Mein Problem:
Ich spreche die Tabellen mit einer Gespeicherten Procedur an.
Das was im großen und Ganzen auch funktioniert.
Probleme gibt es bei einer Tabelle. Diese Tabelle hat 350,000 Einträge.
Ich kann diese Tabelle filtern und im Formular Anzeigen. Kein Problem.
Kritisch wird es wenn ich die Tabelle mit Update oder Insert bearbeiten möchte.
Da friert Access richtig ein. Ich muss dann mit dem Taskmanager die Anwendung schließen.
Der Aufbau der Tabelle:
Artikelid Autowert Primärschlüsselfeld
Produktcod Varchar(25) mit Index
Produktbeschreibung, Mwst, Listenpreis,
Rabattgruppe. Warengruppe. Lieferant.

Die folgenden Felder sind alle Textfelder bis auf Mwst. Listenpreis u. Lieferant.

Was mich zur Verzweiflung bringt: Ich habe ca. 50 gespeicherte Proceduren.
Es Functionieren alle bis auf die Produktliste.

Hat wer einen Tipp für mich?

Besten Dank im Voraus
Peter
 
Werbung:

dabadepdu

Datenbank-Guru
Beiträge
953
Tja, man müsste rausfinden, was "einfrieren" bedeutet.
Ein Update von ein paar Hundert records sollte ruckzug erledigt sein. Ein Update von 300000 Datensätzen dauert halt etwas länger.
Kommt auch auf die Procedures an und was die so treiben.

Wenn in Deiner Update oder Insert Procedure (?) eine Schleife ist, dann werden aus 300000 3 Mio, wenn es eine 10er Schleife ist.
Du müsstest mal schreiben, welche Statements oder Code Du ausführst, wenn es so lange dauert.
 

akretschmer

Datenbank-Guru
Beiträge
9.532
alles nebulös.

  • was verstehst Du unter "die Tabellen mit eine gespeicherten Procedur" ansprechen?
  • was unter 'im Formulat filtern und anzeigen'?
  • was genau machst Du bei Insert oder Update? Hast du da eine stored Proc (selber) erstellt, um das zu machen?
  • falls ja, wie arbeitet diese?
  • es funktioniert alles, bis auf Produktliste? Das kling eher nach einem Select, der Probleme macht, weiter oben sind es aber Insert/Update

wild guess: Du hast für triviale Operationen wie Select oder Update selber stored Procs erstellt, die es verschlimmbessern, weil, wie man so sagt, "Pfusch am Bau". Aber mit Deiner extrem ungenauen Beschreibung kann man kaum helfen ...
 

PeterW

Benutzer
Beiträge
12
Hallo!
Wie ich sehe habe ich das Problem nicht richtig beschreiben:

Es sollte so funktionieren:
In einen Formular werden Daten neu Angelegt/Verändert.
Beim Beenden soll dieser EINE Datensatz angefügt/Verändert werden.

Wenn die Tabelle leer ist, so funktioniert alles bestens Ich kann einen neuen DS Anlegen, den Angelegten verändern.

Das Problem wird schlagend wenn ich ein Datenupdate mache. Es werden von einer Externen Datei Daten (in meinen Fall Datanorm) eingefügt.
Wenn ich dann Daten Verändern oder einen neuen hinzufügen möchte dann ist das nicht möglich. Ich kann vom Frontend nichts machen.
Wie ich anfangs schon erwähnt habe sind das meine Ersten Schritte mit SQL-Server.

Ich habe anfangs den Artikelcod = Varchar(20) als Primärschlpssel verwendet. Mir wurde aber erklärt das der Primärschlüssel ein Nummernfeld sein muss. Ich habe das umgebaut. Ich habe das Feld Produktid hinzugefügt und als Autowrert festgelegt . Der Erfolg lässt auf sich warten. Es hat sich nichts verändert.

Die Gesp. Proceduren funktionieren wie ich schon erwähnt habe wenn die Tabelle leer ist einwandfrei.

Besten Dank im Voraus für einen Tipp!

mfg
Peter
 

ukulele

Datenbank-Guru
Beiträge
4.647
Wenn ganz viele Prozeduren gehen aber eine nicht dann zeig doch mal die Tabelle und die Prozedur dazu.

Führst du die Prozedur aus während Access läuft? Hast du mal die Prozedur mal über das SQL Management Studio laufen lassen?
 

PeterW

Benutzer
Beiträge
12
Hallo!

SQL:
ALTER PROC [dbo].[spProduktUPDATE]
    @ProduktId int,
    @ArtikelID varchar(25),
    @Beschreibung varchar(MAX),
    @Einzelpreis money,
    @MwSt int,
    @Lieferant int,
    @RabattgurppeID varchar(8),
    @WarengruppeID varchar(8)

AS
set nocount on;

UPDATE dbo.tblProdukte  SET
            ArtikelCod = @ArtikelID,
            Warengruppe = @WarengruppeID,     
            Rabattgruppe = @RabattgurppeID,
            Listenpreis = @Einzelpreis,
            MwSt = @mwSt,
            Lieferant=@Lieferant,
            Produkt = @Beschreibung 
WHERE ProduktId = @ProduktId;

Das wäre mein Sorgenkind.
Alle meine anderen Prozeduren, ca. 50, Funktionieren Einwandfrei.
Hinzufügen funktioniert.
Ich kann auch die hinzugefügten Daten bearbeiten/ändern.
Probleme mach die Daten die mittels Daten-Update hinzugefügt wurden.
Wenn ich eine dieser Daten öffne dann steht das System.
Im Management Studio läuft dies Prozedur ohne Problem.

Mfg
Peter
 

ukulele

Datenbank-Guru
Beiträge
4.647
Also zu Access kann ich wirklich nicht viel sagen, habe da nie was mit Formularen gemacht. Aber was genau willst du mit dieser Prozedur bezwecken, soll die als prepared statement fungieren? Ansonsten täte es ja auch ein schnödes UPDATE.
 

dabadepdu

Datenbank-Guru
Beiträge
953
Ich bin nicht vertraut mit den Besonderheiten von T-SQL, aber vielleicht möchte die Prozedur ein Begin End oder insgesamt etwas mehr Syntax Zucker?
Und ja, wie @ukulele fragt, warum nicht einfach nur ein Update? Muss es in eine SP verkleidet sein?
(Kann man machen, hat u.U. sogar Vorteile, aber wenn man etwas aufwändiges nicht hinbekommt, vielleicht einfach mal kleiner anfangen)
 

Mike5689

Benutzer
Beiträge
13
Hallo Peter
Konntest du das Problem mittlerweile lösen?

Ich habe ein ähnliches Problem. Ich bin auch gerade dabei das Backend einer Access Anwendung auf einen MSSQL Server zu verschieben und alle Zugriffe über Gespeicherte Prozeduren zu erstellen. (so kann der Anwender im Access Frontend nicht an den eingebundenen Tabellen rumspielen)

Ich habe die Problem zB bei Update oder Insert Anweisungen wenn diese Werte im Money Format haben.

Vielleicht können wir uns ja da mal austauschen.

MfG,
Mike
 

dabadepdu

Datenbank-Guru
Beiträge
953
Money Columns sind vielleicht wirklich problematisch (selbst wenn man sie "hausintern" verwendet).
1. Table erneut verknüpfen, besonders nach Alter Table im Backend
2. vorhandene MS SQL Treiber durchprobieren (legacy, ODBC, ..). Es gibt uralte, die standardmäßig in Windows installiert wurden/werden und neuere.. hab keinen Überblick
3. Bei der Verknüpfung auf die lokalen Zeit und Währungs Formate achten und innerhalb der Verknüpfung mit und ohne Berücksichtigung dieser lokalen Settings versuchen
4. Notfalls anderen Typ verwenden
5. oder kein Access verwenden
 
Werbung:
Oben