i have 2 db same structre and i want to copy the data of table1 from db1 to db2
but i dont want to include the first field(key field and dont care about it)  

i have done this in

    Private Sub UpdateData(ByVal SelSql As String)

        Dim sourceSQL As String = SelSql
        Dim targetSQL As String = SelSql
        Dim targetDA As New OleDbDataAdapter(targetSQL, CON1)
        Dim cb As New OleDbCommandBuilder(targetDA)
        Dim targetCommand As OleDbCommand = cb.GetInsertCommand
        Dim cmdText As String = targetCommand.CommandText

        If CON2.State = Data.ConnectionState.Closed Then CON2.Open()
        If targetCommand.Connection.State = Data.ConnectionState.Closed Then targetCommand.Connection.Open()

        cmdText = cmdText.Replace("( ", "( [")
        cmdText = cmdText.Replace(" , ", "] , [")
        cmdText = cmdText.Replace(" )", "] )")
        cmdText = cmdText.Replace("[?]", "?")

        targetCommand.CommandText = cmdText
        Dim sourceCommand As New OleDbCommand(sourceSQL, CON2)
        Dim sourceReader As OleDbDataReader
        sourceReader = sourceCommand.ExecuteReader()

        Me.Text = 0
        While sourceReader.Read()
            For i As Integer = 1 To sourceReader.FieldCount - 1
                targetCommand.Parameters(i - 1).Value = sourceReader(i)
            Me.Text = Me.Text + 1
        End While

    End Sub 

this works but is there any better way this takes to much time


Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Jeff CertainCommented:
The easy way to create a make-table query and execute it.

What database are you targeting?
If you only need to copy the data once, you could export it to a flat file (e.g. CSV), then bulk import the flat file into the other DB.
Jeff CertainCommented:
Code looks something like this:

Using conn as New OleDbConnection(connectionString)
  Dim sql as String = "SELECT <fieldList>  INTO <destinationTable> FROM <sourceTables>"
  Using cmd as New OleDbCommand(sql,conn)
  End Using
End Using

OWASP Proactive Controls

Learn the most important control and control categories that every architect and developer should include in their projects.

rockas1982Author Commented:
thnx for fast replay

i'm using access 2003 with 2003

i'm new in sql commands and i saw something that might work the "IN" command .. can this help me ?

the sample i saw is this

strSQL = "INSERT INTO Pricebook  SELECT * FROM Pricebook IN 'K:\PriceBk\PriceBook.mdb'"

i want to give the filepathh from sourcefile and targetfile
Can i connect to my target database and make an insert query asking data from onother database "insert into table1 (all fileds except the first) select table1 (all fileds except the first) IN (filepathAndName) (where shop = "shop1")
do tou think this may work

P.S. is there any way i can add progressbar into this so user can see how long this will take(not important)

sorry for my english(Greece)


Hi Jeff ;-).  Long time no speak.

Can you do that from one DB to another?  Won't you need two different connections?

rockas1982Author Commented:
I hoped that sql will call the second database with the "IN" command ... don't really know
Jeff CertainCommented:

Shoot... you almost caught me...

The sneaky here is that with an enterprise level database (read SQL Server), you can use fully-qualified table names to work across multiple registered databases. I missed the MDB part.

Dimitri... let me post a pointer for you....the Acces gurus can probably help out on this one...
Jeff CertainCommented:
Dimitri.... I'll do one better....

Create the query in Access using the query builder. Click the button in the upper left until it says "SQL"... cut-and-paste this into your VB app as the SQL statement for your command (fixing any quotes, as required)

This way, you can test the SQL statement to make sure it does what you want... and the make-table wizard lets you specify the other database to use.
Leigh PurvisDatabase DeveloperCommented:
Looks like you're already along the right lines.
You just have to specify the fields you do want (to eliminate the fields you don't).

strSQL = "INSERT INTO Pricebook (Field2, Field3, Field26) SELECT Field2, Field3, Field26 FROM Pricebook IN 'K:\PriceBk\PriceBook.mdb'"
strSQL = "INSERT INTO Pricebook (Field2, Field3, Field26) SELECT Field2, Field3, Field26 FROM [K:\PriceBk\PriceBook.mdb].Pricebook"

Not dissimilar to using a linked server - considering that mdb's are file based - you just specify the file.
Executed with a connection to the db you want to receive the records of course.
basic ssyntax is
Select * into tablename in '\path\database.mdb' from tablename
isn't insert into an append?
Leigh PurvisDatabase DeveloperCommented:
Yeah - an append.
Select Into would create a new table - but I understood the question to imply the two db's already had a similar structure.

(Oh, and no rockas1982 there's no exact way to get a progress meter, as the query engine's execution can't be hooked into).
right you are.
Something like this?

Select fld1, fld2, fl3 INTO myNewTable IN "c:\Data\AccessData\myOtherMDB.mdb" FROM myTable;

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.