Server antwortet nicht / Abgleich zweier Tabellen
Hallo zusammen,
ich habe zwei Tabellen (Eine Import und eine Originale) und ich prüfe mit folgendem Code, ob sich ein Preis nach Import geändert hat:
let myImport := (select 'Artikel Import');
for i in myImport do
let myOriginal := first(select 'Artikel' where nummer = i.nummer);
if myOriginal then
if myOriginal.preis != i.preis then
myOriginal.(preis := i.preis);
myOriginal.('Änderung durch Import' := 2);
myOriginal.('Geändert am (durch Import)' := format(now(), "DD-MM-YYYY hh:mm:ss"))
else
myOriginal.('Änderung durch Import' := 1)
end
else
let new := (create 'Artikel');
new.(nummer := i.nummer);
new.(Bezeichnung := i.Bezeichnung);
new.(preis := i.preis);
new.('Änderung durch Import' := 3)
end
end
Es handelt sich um ca. 5500 Datensätze und leider geht Ninox jedes mal in die Knie. Der Server antwortet nicht oder es tut sich nichts. Habe auch mal versucht das gesamte Skript in "do as server" zu setzen, allerdings passiert dann auch nichts. Seht ihr Möglichkeiten den Code anders zu schreiben, sodass es für Ninox einfacher wird? 5500 Datensätze sollten doch möglich sein?
Vielen Dank im Voraus!
LG Sebastian
9 Antworten
-
Hallo Sebastian, hast du schon mal folgende Variante versucht?
do as server
for i in select 'Artikel Import' do
[...]
end
-
Du meinst so?
do as server
for i in select 'Artikel Einstandspreise Import' do
let myOriginal := first(select 'Artikel Einstandspreise' where Material = i.Material);
if myOriginal then
if myOriginal.Einstandspreis != i.Einstandspreis then
myOriginal.(Einstandspreis := i.Einstandspreis);
myOriginal.('Änderung durch Import' := 2);
myOriginal.('Geändert am (durch Import)' := format(now(), "DD-MM-YYYY hh:mm:ss"))
else
myOriginal.('Änderung durch Import' := 1)
end
else
let new := (create 'Artikel Einstandspreise');
new.(Material := i.Material);
new.(Bezeichnung := i.Bezeichnung);
new.('Klassifizierung 1' := i.'Klassifizierung 1');
new.(Produktgruppe := i.Produktgruppe);
new.(Beschreibung := i.Beschreibung);
new.(Materialtyp := i.Materialtyp);
new.(Einstandspreis := i.Einstandspreis);
new.(Materialklasse := i.Materialklasse);
new.(Verkaufssperre := i.Verkaufssperre);
new.('Änderung durch Import' := 3)
end
end
end
So habe ich es gerade versucht, es sah ganz gut aus, weil zumindest das "ladende Rädchen" kam... ich habe 5 min gewartet und dann kam "Der Server antwortet nicht" Sehr komisch.
-
Wenn der Server nicht antwortet, liegt es wohl nicht am Code. Wende dich am besten mal an den Support.
-
Bei mir lag es daran, das es zu lange dauerte. (Die abfrage an sich. 20 min)
-
Vielleicht so:
---
let myImport := (select 'Artikel Import');
let myOrig := (select Artikel);
for i in myImport do
if cnt(myOrig[nummer = i.nummer]) = 0 then
let new := (create Artikel);
new.(
nummer := i.nummer;
Bezeichnung := i.Bezeichnung;
preis := i.preis;
'Änderung durch Import' := 3
)
else
if first(myOrig[nummer = i.nummer]).preis != i.preis then
first(myOrig[nummer = i.nummer]).(
preis := i.preis;
'Änderung durch Import' := 2;
'Geändert am (durch Import)' := format(now(), "DD-MM-YYYY hh:mm:ss")
)
else
first(myOrig[nummer = i.nummer]).('Änderung durch Import' := 1)
end
end
end---
-
Das funktioniert Leo. Es dauert zwar ca. 7 Minuten aber bei 5.500 Datensätzen vielleicht normal? Vielen Dank!
-
Hab das Skript von Leo jetzt noch als do as server probiert und das geht deutlich schneller < 1,5 min
-
Ich werfe mal meinen Hut in den Ring.
Der code von Leo funktioniert ja.
Könnte man es nicht beschleunigen, wenn man statt der verschachtelten selec'st eine Verknüpfung etabliert.In beiden Tabellen scheint ja das Feld nummer zu existieren, welche die Abhängigkeit des Records der einen Tabelle mit dem Record der anderen Tabelle darstellt.
Wenn man jetzt beim Import der csv auf den Änderungstrigger des Feldes Nummer, per select, die Verknüpfung etabliert. (Ich weiss nicht ob bei Import von CSV der Trigger anspringt)
Damit sollte doch die Änderung zügiger vonstatten gehen, da man das Suchen in 5500 Datensätzen vermeidet.
Wie gesagt, das ist nur ein Gedanke wie ich es probieren würde wenn die beschriebenen Funktionsmöglichkeiten zutreffen. -
Hi Uwe,
ich verstehe die Idee, aber ich bin mir relativ sicher, dass ein Trigger nach CSV Import leider nicht möglich ist.
Content aside
- vor 3 JahrenZuletzt aktiv
- 9Antworten
- 427Ansichten