Welcome To The Home Of The Visual FoxPro Experts  
home. signup. forum. archives. search. google. articles. downloads. faq. members. weblogs. sponsors. rss.
 From: Paul Gibson
  Where is Paul Gibson?
 Durham
 United Kingdom
 Paul Gibson
 To: Andy Kramek
  Where is Andy Kramek?
 Westminster Circle, Akron
 Ohio - United States
 Andy Kramek
 Tags
Subject: RE: Bad code I've seen
Thread ID: 138614 Message ID: 138788 # Views: 97 # Ratings: 0
Version: Not Applicable Category: Off-topic
Date: Wednesday, July 18, 2007 10:31:47 AM         
   


> Nope! This is straight VFP and even doing a CAST wouldn't help. The problem is that you can get a NULL from an OUTER JOIN - unless you specifically check for it and negate it using NVL() you will still get this problem. The correct query would be:
>
> In VFP:
>
SELECT CPY.company_name, NVL( CTC.firstname, "" ) AS firstname, NVL( CTC.lastname, "" ) AS lastname  ;
>    FROM company CPY ;
>         LEFT OUTER JOIN contacts CTC ON CTC.companyfk = CPY.companypk ;
>   WHERE CPY.company_name LIKE "A%" ;
>    INTO CURSOR cur_list

>

Ah, the amount of times, I've had to debug a report going wrong because someone hasn't thought about the NULLs.

To add a little bit of extra complexity into things, we sometimes use Crystal Reports to display our reports and Crystal doesn't like encountering DBFs where the field length isn't what it expects (certainly not in the versions we use). So when writting the report code we need to combine NVLs with CASTs in the output cursor. So not only do we filter out the NULLs we make sure that whether NULL or not the field will always be the same length, so the code ends up being something like this:

In VFP:
SELECT CPY.company_name, CAST(NVL(CTC.firstname, "") AS C(30)) AS firstname, CAST(NVL(CTC.lastname, "") AS C(30)) AS lastname  ;
   FROM company CPY ;
        LEFT OUTER JOIN contacts CTC ON CTC.companyfk = CPY.companypk ;
  WHERE CPY.company_name LIKE "A%" ;
   INTO CURSOR cur_list


I don't like to hard code field lengths but it is the most acceptable solution in this case I believe (without writing extra code to examine the field length before the query is executed). If the actual field length of contact.firstname changed the code on the output cursor would have to be changed accordingly but as long as we apply good DB design from the beginning that shouldn't (ha shouldn't) happen too often.



COMPLETE THREAD
Bad code I've seen Posted by Paul Gibson @ 7/17/2007 11:33:31 AM
RE: Bad code I've seen Posted by Boudewijn Lutgerink @ 7/17/2007 12:14:16 PM
RE: Bad code I've seen Posted by Ken Murphy @ 7/19/2007 2:27:44 AM
RE: Bad code I've seen Posted by Christian Tabligan @ 7/19/2007 3:12:26 AM
RE: Bad code I've seen Posted by Cetin Basoz @ 7/17/2007 12:24:11 PM
RE: Bad code I've seen Posted by Brian Walsh @ 9/7/2008 10:44:34 PM
RE: Bad code I've seen Posted by Cetin Basoz @ 9/8/2008 12:42:39 PM
RE: Bad code I've seen Posted by Ilya Rabyy @ 9/8/2008 6:11:29 PM
RE: Bad code I've seen Posted by Brad Schulz @ 9/8/2008 6:16:37 PM
RE: Bad code I've seen Posted by Ilya Rabyy @ 9/8/2008 6:32:11 PM
RE: Bad code I've seen Posted by Mike Yearwood @ 9/9/2008 1:07:25 AM
RE: Bad code I've seen Posted by Cetin Basoz @ 9/9/2008 1:07:04 AM
RE: Bad code I've seen Posted by Mike Yearwood @ 9/9/2008 3:38:23 PM
RE: Bad code I've seen Posted by Ilya Rabyy @ 9/9/2008 4:55:21 PM
RE: Bad code I've seen Posted by Mike Yearwood @ 9/10/2008 10:08:37 PM
RE: Bad code I've seen Posted by Ilya Rabyy @ 9/9/2008 4:43:28 PM
RE: Bad code I've seen Posted by Bernard Bout @ 9/12/2008 8:33:55 AM
RE: Bad code I've seen Posted by Cetin Basoz @ 9/12/2008 3:09:16 PM
RE: Bad code I've seen Posted by Mike Yearwood @ 9/12/2008 4:00:48 PM
RE: Bad code I've seen Posted by Bernard Bout @ 9/13/2008 6:01:30 AM
RE: Bad code I've seen Posted by Andy Kramek @ 7/17/2007 12:55:31 PM
RE: Bad code I've seen Posted by Thomas Bähr @ 7/17/2007 1:05:35 PM
RE: Bad code I've seen Posted by Andy Kramek @ 7/17/2007 11:52:45 PM
RE: Bad code I've seen Posted by Paul Gibson @ 7/18/2007 10:31:47 AM
RE: Bad code I've seen Posted by Anders Altberg @ 9/8/2008 1:29:58 PM
RE: Bad code I've seen Posted by Andy Kramek @ 9/8/2008 2:36:10 PM
RE: Bad code I've seen Posted by Brad Schulz @ 9/8/2008 3:52:38 PM
RE: Bad code I've seen Posted by Andy Kramek @ 9/9/2008 7:05:38 AM
RE: Bad code I've seen Posted by Jim Booth @ 9/9/2008 4:29:05 PM
RE: Bad code I've seen Posted by Andy Kramek @ 9/10/2008 1:33:51 PM
RE: Bad code I've seen Posted by Brad Schulz @ 9/9/2008 6:19:29 PM
RE: Bad code I've seen Posted by Jim Booth @ 9/9/2008 7:23:14 PM
RE: Bad code I've seen Posted by Andy Kramek @ 9/10/2008 1:39:51 PM
RE: Bad code I've seen Posted by Thomas Bähr @ 7/17/2007 1:02:29 PM
RE: Bad code I've seen Posted by Eric den Doop @ 7/18/2007 11:41:02 AM
RE: Bad code I've seen Posted by Tamar Granor @ 7/18/2007 10:19:47 PM
RE: Bad code I've seen Posted by Andy Kramek @ 7/19/2007 2:28:35 PM
RE: Bad code I've seen Posted by Barbara Peisch @ 7/19/2007 5:54:40 AM
RE: Bad code I've seen Posted by Eric den Doop @ 7/19/2007 7:00:56 AM
RE: Bad code I've seen Posted by Barbara Peisch @ 7/19/2007 8:00:59 AM
RE: Bad code I've seen Posted by tushar @ 7/19/2007 2:36:45 PM
RE: Bad code I've seen Posted by Eric den Doop @ 7/19/2007 2:57:49 PM
RE: Bad code I've seen Posted by Christian Pano @ 7/19/2007 11:34:31 AM
RE: Bad code I've seen Posted by Cetin Basoz @ 7/19/2007 12:12:56 PM
RE: Bad code I've seen Posted by Paul Gibson @ 7/19/2007 12:21:32 PM
RE: Bad code I've seen Posted by Cetin Basoz @ 7/19/2007 12:42:34 PM
RE: Bad code I've seen Posted by Paul Gibson @ 7/20/2007 11:36:26 AM
RE: Bad code I've seen Posted by Cetin Basoz @ 7/20/2007 3:13:48 PM
RE: Bad code I've seen Posted by Christian Pano @ 7/23/2007 11:10:22 AM
RE: Bad code I've seen Posted by John Peart @ 7/19/2007 12:18:54 PM
RE: Bad code I've seen Posted by Ken Murphy @ 7/19/2007 2:09:01 PM
RE: Bad code I've seen Posted by tushar @ 7/19/2007 2:24:51 PM
RE: Bad code I've seen Posted by Cetin Basoz @ 7/19/2007 2:44:42 PM
RE: Bad code I've seen Posted by tushar @ 7/19/2007 3:42:47 PM
RE: Bad code I've seen Posted by Ken Murphy @ 7/19/2007 8:22:04 PM
RE: Bad code I've seen Posted by Barbara Peisch @ 7/19/2007 8:34:36 PM
RE: Bad code I've seen Posted by Ken Murphy @ 7/19/2007 10:19:29 PM
RE: Bad code I've seen Posted by Barbara Peisch @ 7/19/2007 10:26:38 PM
RE: Bad code I've seen Posted by Thomas Bähr @ 7/20/2007 11:11:53 AM
RE: Bad code I've seen Posted by Ronan Masangcay @ 7/20/2007 4:48:50 AM
RE: Bad code I've seen Posted by Mike Yearwood @ 7/21/2007 2:35:23 AM
RE: Bad code I've seen Posted by Kurt Westerlund @ 9/12/2008 4:57:50 PM