06. januar 2008 - 16:51Der er
27 kommentarer og 2 løsninger
hvorfor virker dette her ikke ?
Hej jeg sider og arbejder på et system der skal kun lave fakture selv men min kode vil bare ikke når jeg løber min tabel i gemmen vil den ikke oprette anden gang hvorfor kan jeg bare ikke se håber der er en der kan hjælpe lidt bruger mysql
set RS = Conn.execute("SELECT * FROM customerabonnements WHERE Abonnementsnextpaydate<=DATE_ADD(curdate(), INTERVAL 30 DAY)") if not (RS.bof or RS.eof) then do until RS.eof Response.write RS("AbonnementsType") & "<br>" conn.execute("INSERT INTO customerorder (`OrderID`,`CustomerID`,`OrderDate`,`OrderPayDate`,`OrderBogDate`) VALUES (LAST_INSERT_ID( ) , '" &
Hvis du kun skriver din Query string, altså: set RS = Conn.execute("SELECT * FROM customerabonnements WHERE Abonnementsnextpaydate<=DATE_ADD(curdate(), INTERVAL 30 DAY)") if not (RS.bof or RS.eof) then do until RS.eof Response.write RS("AbonnementsType") & "<br>" RS.MoveNext Loop Else Response.Write "Ingen ordre" End If
Hvad sker der så ? Altså får du nogle poster osv ?
indekset vil betyde at du kun kan lægge fx én linie ned med orderid 5, alt afhængig af hvad indekset ligger på.
Endelig kan du vel få problemer i dit loop, for efter at du har indsat én række, så vil LAST_INSERT_ID() blive id'et på den netop indsatte række i customerorder og det er vel ikke korrekt.
min ide var at den skulle løbe tabel customerabonnements igemmen og se om der var et abonnement der skulle betales og så få den til at lave en order men det vil den bare ikke. håber der er en af jer der kan finde en løsning..
ja, den er jeg med på, men du bliver nødt til at lave noget troubleshooting. Du kan jo ikke forvente at vi ud fra koden kan give dig svaret ;)
der for beder jeg dig at få udskrevet din querystrings, istedet for rent faktisk at opdatere dem i din database, hvilket er grundlæggende når man skriver asp, på denne måde sikrer du dig at det er de rigtige værdier der bliver spurgt efter :)
-- -- Struktur-dump for tabellen `customerorder` --
CREATE TABLE `customerorder` ( `OrderID` int(11) NOT NULL auto_increment, `CustomerID` int(11) NOT NULL, `OrderDate` date NOT NULL, `OrderPayDate` date NOT NULL, `OrderBogDate` date NOT NULL default '0000-00-00', PRIMARY KEY (`OrderID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Det er - som tidligere skrevet - dit OrderID der er problemet. Når du har sat det til auto_increment er det et rigtigt dårligt valg at forsøge at indsætte data selv som du gør - derudover bliver feltet et unikt indeks hvilket betyder at flere rækker ikke må have samme id-nummer og det risikerer du i dit loop.
Jeg ved ikke præcist hvad du vil opnå - men den egentlige fejl vil formentlig blive løst med
aspguf, har du prøvet det jeg skrev ? altså med at udskrive din insert streng ?
Keysersoze har ret, du må ikke ændre på post ID'et. det er forudgivet fra SQL, og kan ikke ændres -> dette medfører en fejl.
Men gider du ikke prøve med dine egne ord at beskrive hvad det er du vil opnå, altså hvor mange dage skal der være til den pågældende abonnements betalingsdato inden der laves en ordre, hvor mange dage skal der så være dertil osv ? Hvilke tabeller skal du bruge.
set RS = Conn.execute("SELECT * FROM customerabonnements WHERE Abonnementsnextpaydate<DATE_ADD(curdate(), INTERVAL 30 DAY)") if not (RS.bof or RS.eof) then do until RS.eof conn.execute("INSERT INTO customerorder (CustomerID, OrderDate, OrderPayDate) VALUES ('" & int(RS("CustomerID")) & "', CURDATE(),
DATE_ADD(curdate(), INTERVAL 14 DAY))") conn.execute("UPDATE customerabonnements SET Abonnementsnextpaydate=DATE_ADD(curdate(), INTERVAL 30 DAY) WHERE Abonnementsid=" &
int(RS("Abonnementsid"))) Response.write RS("AbonnementsType") & "<br>" RS.MoveNext Loop Else Response.Write "Ingen ordre" End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.