Avatar billede aspguf Nybegynder
06. januar 2008 - 16:51 Der 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( ) , '" &

int(RS("CustomerID")) & "', CURDATE( ) , DATE_ADD(curdate(), INTERVAL 14 DAY) , '0000-00-00')")


conn.execute("UPDATE customerabonnements SET Abonnementsnextpaydate=DATE_ADD(Abonnementsnextpaydate, INTERVAL 90 DAY) WHERE Abonnementsid=" &

RS("Abonnementsid") & " LIMIT 1 ")

        RS.movenext
        loop
    else
        Response.write "Ingen order"
    end if
Avatar billede keysersoze Guru
06. januar 2008 - 16:55 #1
og hvilken fejl får du?
Avatar billede aspguf Nybegynder
06. januar 2008 - 17:26 #2
kun

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-5.0.21-community-nt]Duplicate entry '1' for key 1

/pay.asp, line 9
Avatar billede fiasko Nybegynder
06. januar 2008 - 17:44 #3
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 ?
Avatar billede fiasko Nybegynder
06. januar 2008 - 17:45 #4
Og hvordan ser din Date_add() ud når du udskriver den ?
Avatar billede keysersoze Guru
06. januar 2008 - 17:46 #5
det er skam også tilstrækkeligt - du har sat et unikt indeks på en af dine kolonner.
Avatar billede aspguf Nybegynder
06. januar 2008 - 17:49 #6
det jeg selv kan se er når jeg vil update den sådan at den ikke komme med næste gang
Avatar billede keysersoze Guru
06. januar 2008 - 17:50 #7
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.
Avatar billede fiasko Nybegynder
06. januar 2008 - 17:52 #8
hmm jeg ville anbefale dig at skrive din query sådan her:

Set RS = Conn.execute(StrSQL)
StrSQL = "DATE_ADD(curdate(), INTERVAL 30 DAY)")"

Dette giver dig muligheden for:
Response.Write StrSQL

Her kan du se om din query string svarer til det du vil undersøge.
Avatar billede aspguf Nybegynder
06. januar 2008 - 17:58 #9
Jeg er ikke helt med på hvad jeg skal gøre..
Avatar billede fiasko Nybegynder
06. januar 2008 - 18:01 #10
hvad er outputtet fra din Querys ? altså din select from og insert ? altså når du har kørt dem.

f.eks.

Set RS = Conn.Execute(StrSQL)
StrSQL = "Select * from mintabel where value1 = value2"

Nu kan du gøre følgende:

sæt appostrof foran "set Rs ..."

'Set RS = blablabla(bla)
StrSQL = "select * from mintabel"
Response.Write (StrSQL)

Nu kan du se om der er fejl i de query du giver til databasen?
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:02 #11
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..
Avatar billede fiasko Nybegynder
06. januar 2008 - 18:10 #12
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 :)
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:10 #13
jeg får 2008-02-05 når jeg køre DATE_ADD(curdate(), INTERVAL 30 DAY)

men det ser ud til at være når jeg oprette en order at det hele køre af spor..
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:24 #14
fiasko > jeg er hvis ikke helt med på hvad du mender kan du forklare dig ?
Avatar billede keysersoze Guru
06. januar 2008 - 18:34 #15
Hvordan er din tabel bygget op? felttyper osv?
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:36 #16
ok to sec så smider jeg den lige
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:38 #17
CREATE TABLE `customer` (
  `CustomerID` int(11) NOT NULL auto_increment,
  `CustomerType` enum('Privat','Firma') NOT NULL,
  `CustomerCvr` varchar(50) NOT NULL,
  `CustomerName` varchar(255) NOT NULL,
  `CustomerAtt` varchar(255) NOT NULL,
  `CustomerAdr1` varchar(255) NOT NULL,
  `CustomerAdr2` varchar(255) NOT NULL,
  `CustomerZipcode` varchar(255) NOT NULL,
  `CustomerCity` varchar(255) NOT NULL,
  `CustomerTelefon` varchar(50) NOT NULL,
  `Customerhomepage` varchar(255) NOT NULL,
  `CustomerStatus` enum('Aktiv','Inaktiv') NOT NULL,
  `CustomerNotat` longtext NOT NULL,
  PRIMARY KEY  (`CustomerID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Data dump for tabellen `customer`
--

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `customerabonnements`
--

CREATE TABLE `customerabonnements` (
  `Abonnementsid` int(11) NOT NULL auto_increment,
  `CustomerID` int(11) NOT NULL,
  `AbonnementsType` varchar(255) NOT NULL,
  `Abonnementsbetaling` enum('1','3','6','12') NOT NULL,
  `Abonnementsnextpaydate` date NOT NULL,
  `AbonnementsPrisprmd` decimal(8,2) NOT NULL,
  PRIMARY KEY  (`Abonnementsid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Data dump for tabellen `customerabonnements`
--

INSERT INTO `customerabonnements` VALUES (1, 1, 'test1', '3', '2008-02-05', '210.00');
INSERT INTO `customerabonnements` VALUES (2, 1, 'test2', '6', '2007-02-05', '99.00');

-- --------------------------------------------------------

--
-- 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 ;

--
-- Data dump for tabellen `customerorder`
--



-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `customerorderline`
--

CREATE TABLE `customerorderline` (
  `orderlineid` int(11) NOT NULL auto_increment,
  `orderid` int(11) NOT NULL,
  `orderlinevarenr` varchar(50) NOT NULL,
  `orderlinevaretitle` varchar(255) NOT NULL,
  `orderlinevareantal` int(11) NOT NULL,
  `orderlinevarepris` decimal(8,2) NOT NULL,
  PRIMARY KEY  (`orderlineid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Data dump for tabellen `customerorderline`
--
Avatar billede fiasko Nybegynder
06. januar 2008 - 18:38 #18
aspguf - ja, det kan jeg sagtens :) Du kan bare spørge :)hvad gør din interval 30 DAY ?

Hvordan ser din insert streng så ud?
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:43 #19
den skulle gerne give mig den dato jeg har smit tidliger
>>
jeg får 2008-02-05 når jeg køre DATE_ADD(curdate(), INTERVAL 30 DAY)
Avatar billede keysersoze Guru
06. januar 2008 - 18:43 #20
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

conn.execute("INSERT INTO customerorder (CustomerID, OrderDate, OrderPayDate, OrderBogDate) VALUES ('" & int(RS("CustomerID")) & "', CURDATE(), DATE_ADD(curdate(), INTERVAL 14 DAY) , '0000-00-00')")

om det så opfylder dit mål kan jeg ikke sige.
Avatar billede aspguf Nybegynder
06. januar 2008 - 18:46 #21
keysersoze > det virker heller ikke det du har smit..
Avatar billede fiasko Nybegynder
06. januar 2008 - 18:57 #22
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.
Avatar billede aspguf Nybegynder
06. januar 2008 - 19:02 #23
Jubii ser det sku ud til at virke,


    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
Avatar billede aspguf Nybegynder
06. januar 2008 - 19:06 #24
Takke alle der har give en hånd.. keysersoze er den der har fortjænt point så hvis du lige smider en svar så accpter jeg og lukker
Avatar billede fiasko Nybegynder
06. januar 2008 - 19:07 #25
Hvad hjalp ? Det med PostID?
Avatar billede aspguf Nybegynder
06. januar 2008 - 19:13 #26
ja det var hvis det med orderid der fik det hele til at drille
Avatar billede fiasko Nybegynder
06. januar 2008 - 19:24 #27
ahh ok :)
Avatar billede keysersoze Guru
06. januar 2008 - 20:01 #28
svar :)
Avatar billede aspguf Nybegynder
06. januar 2008 - 22:54 #29
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester