Zitat Zitat von Bernd Wiezroek
.
Es kommt zu keiner Fehlermeldung.
Das stimmt so nicht! Du müsstest bei dem UPDATE-statement den SQLCOD -510 erhalten: Cursor &1 für Datei &2 schreibgeschützt.

Wird ein Cursor ohne ORDER BY-Kausel definiert, können Datensätze ohne Angabe der FOR UPDATE OF Klausel fortgeschrieben werden.
Der Datensatz wird beim Einlesen nur dann gelockt, wenn im Programm ein Update auf den Cursor mit WHERE CURRENT OF vorhanden ist.

Wird eine ORDER BY-Klausel im Declare-Statement angegeben, gilt der CURSOR als Read Only, es sei denn die FOR UPDATE OF wird angegeben.

Bei der FOR UPDATE OF Klausel müssen alle Felder, die geändert werden sollen durch Kommata getrennt aufgelistet werden.

Werden nicht alle Felder aufgelistet, ist der UPDATE nicht erfolgreich.

Noch ein Tipp frage nach jedem SQL-Statement entweder SQLCOD oder SQLSTT ab, um festzustellen ob ein Fehler aufgetreten ist.

PHP-Code:
C/EXEC SQL                                                            
C
+ Declare CsrOrdH dynamic scroll Cursor WITH HOLD for                
CSelect Order_NumberOrder_Total                                   
C
+   from Order_Header                                                
C
+   where     Order_Number between :FirstOrderNo and :LastOrderNo    
C
+         and Year(Order_Date)   = :PrevYear                         
C
+   Order by Order_Number                                            
C
+ For Update Of Order_TotalOrder_Date                                          
C
/End-Exec                                                            
                                                                      
C
/EXEC SQL Close CsrOrdH                                              
C
/END-EXEC                                                            
                                                                      
C
/EXEC SQL Open  CsrOrdH                                              
C
/END-EXEC                                                            
C                   DoU       SQLSTT   
'02000'                      
                                                                      
C/EXEC SQL                                                            
C
Fetch next from CsrOrdH                                            
C
+       into :OrderNo, :OrderTotal                                   
C
/END-EXEC 
        
C
/EXEC SQL     
C
update Order_Header                      
C
+        Set Order_Total = :OrderTotal   
C
+            Order_Date = :OrderDate  
C
where  Current of CsrOrdH                
C
/END-EXEC 

Birgitta