Chris Payne

September 11, 2000

Well, now your auction can run for an indefinite time. People can keep placing bids until you decide to

stop them (good for the seller, but makes bidders kind of unhappy, to say the least). Let's discuss the

mechanisms for stopping an auction.

There are two easy ways to do it. The first, and easiest to perform, though requiring more manual

intervention in the long run, is to simply build in an "Active" bit field into your tblAuctions table.

When you decide to stop the auction, flip the bit, and the auction is over. (You'll also have to add some

code to make sure that the DoBids and ResolveBids functions don't operate on closed auctions.) Then simply

query the database, find out the winner(s), and let them and the seller know. Easy as pie.

The second method is to go by the end date the seller specifies (better business, believe me). To do this,

you can manually stop the auction (via the process above) when the appropriate date comes, or you can

schedule a task to turn an auction off at the appropriate times. There are a few ways to do this, via your

database program and the Windows NT Task Scheduler, so I won't go through each one. You could simply set

the script to run every midnight or so to stop the auction and determine the winners.

If you let the seller specify an exact time for the auction to end, then you're introducing a whole new

set of complications. One way to handle this is to programmatically set a scheduled task as soon as the

seller submits the auction, for the end date of the auction. This requires minimum intervention, but

requires you to know how to do that (for documentation on the Task Scheduler, read this MSDN article).

Another method is to create your own specific version of task scheduler; create a small program that will

run in the background and watch the times on auctions. When an auction end date passes, flip the bit.

Okay, so the auction is over. Now what?

Assuming that you would like minimal manual intervention, and you don't really care who wins (like the

head guys at Ebay care who wins every single auction), then you could create a function to send alerts to

the winner(s) and seller that will kick off when the auction is over. This function could also in turn

kick off some type of payment system, but that is beyond the scope of this article. Let's look at the


Function SelectWinners(AuctionID, itemID)

'Set variables and create objects

dim totItems, intAvailable

totItems = 0

strConnectionString = "DSN=MyAuction;UID=username;PWD=password;Database=MyAuctionDB"

set rst = Server.CreateObject("ADODB.Recordset")

'Find the number of items available

strSQL = "SELECT Available FROM tblAuctionItems WHERE " & _

  "IID = " & ItemID

rst.open strSQL, strConnectionString

intAvailable = rst(1)


'find the winners

'If two customers bid the same amount, the customer requesting

more items will win. If still tied, the customer placing the

earliest bid will win

strSQL = "SELECT UID, WinPrice, WinItems FROM tblAuctionBids " & _

  "WHERE IID = " & itemID & " ORDER BY WinItems DESC, Time"

rst.open strSQL, strConnectionString

if not rst.eof then

  do until rst.eof OR totItems >= intAvailable

    'Keep a running tally of items distributed

    totItems = totItems + rst(2)

    If totItems <= intAvailable then 'This buyer won

      'Send an email alerting this buyer

      call SendWinningEmail(rst(0))

    End if



end if

End Function

This is a pretty simple function. Simply loop through the bids in the correct order (by number of items

won first, and then by date), and alert the buyers that they've won. Once the number of items bid for gets

higher than the number of items available, every one else loses, and you can stop the loop. I won't go

into the SendWinningEmail() function, but all it does is send the user specified by rst(0) an email that

says they've won and for how much and how many. (For an example using email, check out this WDVL article.)





  • 最新排行
  • 最热排行
  • 评分最高