Grüß euch,
vielleicht kann mir hier jemand kurz helfen - Danke.
Ich habe eine Liste verschiedener Adressen, die jede eine "a_id" als ID besitzt. Nun habe ich vor jeden Listeneintrag eine Checkbox gesetzt, um es möglich zu machen, die ausgewählten Einträge zu löschen, über ein Formular zu löschen -> dieses ruft somit eine Z_SQL_Methode auf.
Wenn nur einer ausgewählt ist funktioniert alles problemlos, aber wie mache ich es wenn man mehrere Einträge auswählt?
Habe folgendens gelesen:
<input type="checkbox" name="a_id:list:int" value="<dtml-var a_id>">
Somit müsste ich eine Int-Liste erstellt haben
Aber wie schaut zu so einer Liste die ZSQL-Methode aus, damit für jede ID die SQL-Abfrage ausgewählt wird?
Meine bisherige war:
BEGIN;
delete from adressen
where a_id=<dtml-sqlvar a_id type=int>;
COMMIT;
Geht es vielleicht mit sqltest oder sqlgroup
:list:int mit ZSQL
Moin,
du kannst via dtml-in über die Liste iterieren:
du kannst via dtml-in über die Liste iterieren:
Code: Alles auswählen
BEGIN;
delete from adressen
where a_id in (
<dtml-in a_id>
<dtml-sqlvar sequence-item><dtml-unless sequence-end>,</dtml-unless>
</dtml-in>
);
COMMIT;
danke... das ist genau das was ich gesucht habe
probiere es demnächst gleich mal aus und gebe dir/euch eine rückmeldung.
Habe mich schon mit dem gedanken gespielt, mit einer python methode die Liste so zu formatieren, dass ich eine SQL-IN daraus machen kann.
Aber diese Lösung ist doch einfacher
probiere es demnächst gleich mal aus und gebe dir/euch eine rückmeldung.
Habe mich schon mit dem gedanken gespielt, mit einer python methode die Liste so zu formatieren, dass ich eine SQL-IN daraus machen kann.
Aber diese Lösung ist doch einfacher
anscheinend muss ich noch den typ konvertieren
Code: Alles auswählen
Error Type: ValueError
Error Value: Strings are not allowed as input to the in tag.
Folgender Lösungsansatz von mir...
Python-Objekt: py_get_sel_adr
... ergibt folgende Fehlermeldung
Leider noch immer
EDIT:
Das Problem liegt höchstwahrscheinlich an einer Datei, die sich zwischen dem Formular und der SQL befindet, wo die Liste als input hidden weitergegeben wird...
Code: Alles auswählen
BEGIN;
delete from adressen
where a_id in <dtml-var py_get_sel_adr>;
COMMIT;
Code: Alles auswählen
#
form = container.REQUEST.form
a_id_str='('
for a_id in form.get('a_id_list',[]):
a_id_str=a_id_str + a_id + ','
if len(a_id_str)>1:
return a_id_str.rstrip(',')+')'
else:
0
Code: Alles auswählen
Error Type: ProgrammingError
Error Value: syntax error at or near "[" LINE 3: where a_id in ([2000); ^
EDIT:
Das Problem liegt höchstwahrscheinlich an einer Datei, die sich zwischen dem Formular und der SQL befindet, wo die Liste als input hidden weitergegeben wird...
LÖSUNG
Das Problem lag, dass in einer Zwischendatei ("Wollen sie wirklich löschen") die Variable nicht richtig weitergegeben wurde...
Also wird nun die Variable per :list an die Zwischendatei übergeben und dort durch das Python-Script weitergegeben und dann in die SQL Abfrage eingesetzt
Vielleicht hilft dies jemanden und ich sage mal danke an helduel
Das Problem lag, dass in einer Zwischendatei ("Wollen sie wirklich löschen") die Variable nicht richtig weitergegeben wurde...
Code: Alles auswählen
<dtml-if a_id_list>
<input type=hidden name=a_id value=<dtml-var py_get_sel_adr>>
</dtml-if a_id_list>
Code: Alles auswählen
BEGIN;
delete from adressen
where a_id in <dtml-var a_id>;
COMMIT;