15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


ODBC: Query is too complex

Dennis W. Tan -- dennis@ny.amarex.com
Thursday, March 06, 1997

Environment:  Win 95, NT 4.0, VC++ 4.2-flat

Hi:
	I have an application that used odbc driver to browse for paradox =
database files.  Everything works fine except that odbc won't let me =
update or delete records.  It gives me error: Query is too complex.  So, =
I went to the on line odbc bug list and found that it is a bug in mfc =
odbc design; it won't accept when a database has more than 40 columns, =
which is true in my case.  Now my question is, how can I work around =
this without reducing my database column size ?
	I've tried to declare my derived CRecordSet class to be dynaset, and =
odbc throws an exception on Open function of my CRecordSet class and the =
error message says "no data  truncated" ?=20
Any help is really appreciated !!!

Dennis Tan
Software Engineer
Amarex Technology Inc.
e-mail: dennis@amarex.com






Ajay K Sanghi -- sanghi@giasdl01.vsnl.net.in
Saturday, March 08, 1997

[Mini-digest: 2 responses]

Hi!
 I agree with you that this is a bug in mfc's CRecordset class which is 
unable to handle more than 40 fields in a table . Well .. there is a get 
arround for this . As you need to just delete and update the records you 
need not use Crecordset . You can do it with CDatabase and fire the SQL 
to Edit or Update the table you want to use . CDatabase is capable of 
handling more than 40 fields . I have updated tables with 75 fields in it 
using CDatabase::ExecuteSQL() . Hope this solves your problem

Bye!
Aditya Sanghi

On Thu, 6 Mar 1997, Amarex PC wrote:

> Environment:  Win 95, NT 4.0, VC++ 4.2-flat
> 
> Hi:
> 	I have an application that used odbc driver to browse for paradox database files.  Everything works fine except that odbc won't let me update or delete records.  It gives me error: Query is too complex.  So, I went to the on line odbc bug list and found that it is a bug in mfc odbc design; it won't accept when a database has more than 40 columns, which is true in my case.  Now my question is, how can I work around this without reducing my database column size ?
> 	I've tried to declare my derived CRecordSet class to be dynaset, and odbc throws an exception on Open function of my CRecordSet class and the error message says "no data  truncated" ? 
> Any help is really appreciated !!!
> 
> Dennis Tan
> Software Engineer
> Amarex Technology Inc.
> e-mail: dennis@amarex.com
> 
> 
> 
> 
-----From: Lior Messinger <100274.2607@CompuServe.COM>

Hi,
We have encountered many problems with CReordset and decided to leave the
CRecordSet's updates. We have derived a class from CRecordSet, and replaced the
Update/Insert functions with our own code which calls the raw SQL functions. Our
code never does positioned updates (update on the current record), but always
updates with a where clause. If your driver supplies an internal id for each
record (our does - it's Intersolv) then you ca mimic positioned updates.


regards,
Lior Messinger.
Hi:
	I have an application that used odbc driver to browse for paradox =
database files.  Everything works fine except that odbc won't let me =
update or delete records.  It gives me error: Query is too complex.  So, =
I went to the on line odbc bug list and found that it is a bug in mfc =
odbc design; it won't accept when a database has more than 40 columns, =
which is true in my case.  Now my question is, how can I work around =
this without reducing my database column size ?
	I've tried to declare my derived CRecordSet class to be dynaset, and =
odbc throws an exception on Open function of my CRecordSet class and the =
error message says "no data  truncated" ?=20
Any help is really appreciated !!!

Dennis Tan
Software Engineer
Amarex Technology Inc.
e-mail: dennis@amarex.com




Xiangyang Sean Liu -- seanliu@oscsystems.com
Tuesday, March 11, 1997


Using CDatabse::ExecuteSQL may cause problems that are hard to
detect.  For example, if you want to set field F in table T to value V and
field F is of type SQL_CHAR.  So you build a SQL string like the following

    'update T set F = V where ... '

and pass it into CDatabse::ExecuteSQL as the argument.  If the value V
itself contains a single quote character ('), the call will fail because the
string you passed is invalid.  But no exception will be thrown.  Even if
you checked the return value of ExecuteSQL and found it wasn't
executed successfully, what can you do about it?  Ask your user not to
use certain characters in any character field?

--- Xiangyang Liu

P.S.  By the way, I am talking about VC++ 1.52 (working with Sybase
11).


>>> Ajay K Sanghi 
03/08/97 01:37pm >>>
[Mini-digest: 2 responses]

Hi!
 I agree with you that this is a bug in mfc's CRecordset class which is 
unable to handle more than 40 fields in a table . Well .. there is a get 
arround for this . As you need to just delete and update the records you 
need not use Crecordset . You can do it with CDatabase and fire the
SQL  to Edit or Update the table you want to use . CDatabase is capable
of  handling more than 40 fields . I have updated tables with 75 fields in it 
using CDatabase::ExecuteSQL() . Hope this solves your problem

Bye!
Aditya Sanghi

On Thu, 6 Mar 1997, Amarex PC wrote:

> Environment:  Win 95, NT 4.0, VC++ 4.2-flat
>  > Hi:
> 	I have an application that used odbc driver to browse for paradox
database files.  Everything works fine except that odbc won't let me
update or delete records.  It gives me error: Query is too complex.  So, I
went to the on line odbc bug list and found that it is a bug in mfc odbc
design; it won't accept when a database has more than 40 columns,
which is true in my case.  Now my question is, how can I work around
this without reducing my database column size ?
> 	I've tried to declare my derived CRecordSet class to be dynaset,
and odbc throws an exception on Open function of my CRecordSet
class and the error message says "no data  truncated" ?  > Any help is
really appreciated !!!
>  > Dennis Tan
> Software Engineer
> Amarex Technology Inc.
> e-mail: dennis@amarex.com
>  >  >  >  -----From: Lior Messinger <100274.2607@CompuServe.COM>

Hi,
We have encountered many problems with CReordset and decided to
leave the
CRecordSet's updates. We have derived a class from CRecordSet, and
replaced the
Update/Insert functions with our own code which calls the raw SQL
functions. Our code never does positioned updates (update on the
current record), but always updates with a where clause. If your driver
supplies an internal id for each record (our does - it's Intersolv) then you
ca mimic positioned updates.


regards,
Lior Messinger.
Hi:
	I have an application that used odbc driver to browse for paradox
= database files.  Everything works fine except that odbc won't let me =
update or delete records.  It gives me error: Query is too complex.  So, =
I went to the on line odbc bug list and found that it is a bug in mfc = odbc
design; it won't accept when a database has more than 40 columns, =
which is true in my case.  Now my question is, how can I work around =
this without reducing my database column size ?
	I've tried to declare my derived CRecordSet class to be dynaset,
and = odbc throws an exception on Open function of my CRecordSet
class and the = error message says "no data  truncated" ?=20
Any help is really appreciated !!!

Dennis Tan
Software Engineer
Amarex Technology Inc. e-mail: dennis@amarex.com







Become an MFC-L member | Вернуться в корень Архива |