|
You'd do it the same way, but the catch is VBScript or Microsoft 'anything' doesn't come with objects standard that would do that. In your example, your using a 3rd party object to make the connection. For AS400, you'd have to use another 3rd party object, like Rumba from NetManage.
RageInTheMachine9532
|
|
|
|
|
Hi,
I am trying to open a database using mdb file.
I get the message '*.mdb not found' despite the fact that it exists n the specific path.
In the project pereferenes i added 'microsoft dao 3.6'.
What can i do to make it work???
Any help will do.
Thanks
|
|
|
|
|
From the error message, it looks like your actually trying to open a file called '*.mdb' (without the quotes). You can't use wildcards in any of the Open File functions.
But, a little code sample showing what your doing might help in diagnosing the problem.
RageInTheMachine9532
|
|
|
|
|
i tried to open a specific mdb file "xxx.mdb"
|
|
|
|
|
|
As RageInTheMachine9532 said, a code sample would help us help you. Right now we don't have enough information.
|
|
|
|
|
set db as database
set rec as recordset
open db=opendatabase("xx.mdb")
open rec=db.openrecordset("select * from xx",opendynaset)
I GOT ERROR AT LINE NUMBER 3
|
|
|
|
|
Well the syntax of your example is not correct but I think I know what you're trying to do.
The first thing that I'd do is try using the absolute path of the database and see if that works. Here is an example of the same code that I tried that worked.
<br />
Dim db As Database<br />
Dim rs As Recordset<br />
<br />
' open the database in the application directory<br />
Set db = OpenDatabase(App.Path & "\mydata.mdb")<br />
Set rs = db.OpenRecordset("SELECT * FROM MYTABLE")<br />
The only other thing that I'd recommend is that you use ADO vs. DAO.
|
|
|
|
|
i tried to do it but i get the same massege
any connection to the projet refrenses, i choose(microsoft dao 3.6)?
|
|
|
|
|
Then you might want to try hard coding the entire path to the database in your OpenDatabase statement because it looks like OpenDatabase can't find your filename in the default path or the path your project is running from.
Dim db As Database
Dim rs As Recordset
' open the database from exactly where I say it is
Set db = OpenDatabase("C:\FullPath\ToMyDatabase\mydata.mdb")
Set rs = db.OpenRecordset("SELECT * FROM MYTABLE")
and SERIOUSLY consider moving your code to ADO instead of DAO. DAO seems to be a dead technology.
If your using VB6, you can start here[^] to learn about ADO.
If your using VB.NET, you might want to start here[^].
RageInTheMachine9532
|
|
|
|
|
In Project References try using:
"Microsoft ActiveX Database Object 2.7 Library."
If you don't have the 2.7 library, you should have either 2.0, 2.1, 2.5, or 2.6. Use one of them.
I was looking in the VB documentation and for DAO it says that the OpenDatabase statement is depricated and that you should use the DBEngine object to open a database. So if you must use DAO, then try checking out the documentation on the DBEngine object.
By the way, I was able to use DAO to access my database. So maybe you have some other configuration problem.
|
|
|
|
|
I am using access 2003. is there any special configuration for this version that you know about that i should try?
|
|
|
|
|
Are you getting an error number?
I tried to open a file that didn't exist and I got a run time erro #3024. Is that what you get? Or do you get some other number error number?
Regarding Access 2003, I'm not aware of any configuration stuff that would affect a VB program.
|
|
|
|
|
Yes, this is the error number i get. but the exist.
|
|
|
|
|
I'm grasping at straws...but have you tried opening up another database file. Maybe create a database with one table and try to access that.
OR
Maybe it's a sharing violation. In the past I've had trouble opening a database if I had it open in MS-Access, especially if it's open exclusively by MS-Access.
|
|
|
|
|
This seems a real tricky one.
I want a class which is a single instance. So what I did was make all its members shared and they in turn are accessed by property gets/sets as you would expect. I then want a shared timer, so no matter how many other objects have a reference to my "singleton" class they all receive a polled event which emanates from the one timer.
I want a timer in the singleton class that polls all interested parties at one tick every 100 ms. Problem is because the timer is shared...
Shared mTimer as New Timer
The event that the Timer class raises is shared...
Shared Sub mTimer_Tick...
If I try and do this...
Shared Sub mTimer_Tick...
RaiseEvent MyTimerEvent
end sub
I have to write....
Shared event MyTimerEvent
But then in my object which utilises this class....
Dim WithEvents mObject as MySingletonObject
This fails because it says there are no events that can be raised on MySingletonObject which is bull. So this is something to do with have shared members that raise events that you in turn want to pass onto to a whole heap of other objects, and I can't find a way to do it. If I was to fall back to C++, I'd start sending Window messages, like the fix for having a timer on one thread which polls a window on another thread to say the timer has fired, remember that one!
Ah well, any corrections to my technique will cause tears and tantrums, but I will try and listen hahahaha
Thx!
Nursey
|
|
|
|
|
Dear all,
I've now seen the error of my ways and produced a more elegant way, and adopted a more technically correct approach from an OO point of view.
I have a polling class and a polled object interface which people can implement. They register their objects with the "poller" and it polls all registered object periodically, so I have a single timer object which can trigger events in many objects which I think gives me basically limitless resource, rather than having loads of timers running. This lets me do things like blinking buttons, if you're interested.
Anyway, it will all be included in the next release of my XP buttons and docking containers release.
Thanks anyway.
Nursey
|
|
|
|
|
Can I use bit shifting operators in VB. According to MSDN I can. But...my msdn library is 2003 and my VB is 2002! Do I have to import something because I see erros when I try a = B >> 2. I am using VB 2002.
Thanks you lot!
Nursey
|
|
|
|
|
The bit shift operators are new to 2003. They don't exist in 2002...
Sorry!
RageInTheMachine9532
|
|
|
|
|
Hey Rage,
I thought as much, presumably they are in C# so really I could just knock up a quick C# object which offers bit shifting and byte extraction from 32-bit ints, the stuff we take for granted in C++.
As a feeler, how long has it taken people to get to grips with C# if you know C++, or VB for example?
Just another language is what I say, and they should all be learned if possible, it helps you to think outside the box.
Chris.
Nursey
|
|
|
|
|
And your right my friend! This is what learning all those different languages is all about! I prefer VB for the bulk of my code just because it's fast to write up. But I also write components in C# and C++, and for the real down and dirty with API's, NetWare, and libraries, in use C++.
It didn't take very long at all to get used to C#, having a background in both VB and C++, it was a snap to learn. It just took a couple weeks to get used to the hybrid syntax! In all, I think I have my hands in something like 14 different languages. I'm by no means a master of all of them, but the concepts are the same amongst them all. But you're right! The more you know, the better off you are!
RageInTheMachine9532
|
|
|
|
|
Well, as soon as I have put some polish on this current control library I'll dive into C#. I have a feeling the hybrid syntax will be pretty intuitive. I just have to remember to keep putting the ";" in the right places again!
Have you used any free tracing tools that help you to dig out strange bugs which are hard to track down at design time? I was getting "Null reference exception..." and I couldn't pinpoint the line which it was at until I put some message boxes in. It seems at design time code gets run which you can't step through. I remember running two copies of VB6 to debug controls at design time. Presumably that's still an option?
Ta.
Nursey
|
|
|
|
|
Yep, you can debug design-time code just about the same way you could under VB6. Microsoft was kind enough to supply a sample of it here[^].
RageInTheMachine9532
|
|
|
|
|
The previous poster is correct - the shifting operators are 2003 only.
However, if you have an integer value you can mimic some of the shifting by dividing or multiplying by two, although this is far from perfect and may cause overflow errors and suchlike. You might also find that you can bit mask, and created the shifted up or down value by adding or subtracting the relevant powers of 2 to an initial zero value.
You could also create a lookup table of shifts if you don't mind the memory overhead, but this would be fast and simple (note this is only really practical for small bitfields, of size 8 bits or there abouts (an array 256 Bytes each way) - 32 bits woud be right out due to needing 4 gig of memory for each )
Or upgrade your project to 2003
--
Ian Darling
"The moral of the story is that with a contrived example, you can prove anything." - Joel Spolsky
|
|
|
|
|
Having put your 4 Gig of memory method to the test I seem to have scratched the area of my hard disk, right around the place where the swap file seems to go
I am gonna go the C# route just to have a little utility function until my 2003 hits the front door carpet. I was using the div mul method of shifting up until now though and who cares if its 4 nano seconds slower than the C++ like bit shifts!
Ah well, all I have to do now is wait for the garbage collector to give me my 4 gig back hahaha 8-)
See Yah!
Nursey
|
|
|
|