PDA

View Full Version : ساخت جدول Access از روی دیتاست بانک SQL



A.Farzin
یک شنبه 13 اسفند 1385, 19:18 عصر
با سلام

در MS-Access می‌توانستیم از طریق کد و به شکل زیر داده‌های یک رکوردست را به یک جدول دیگر از نوع اکسس (خواه در همان بانک و خواه در بانک دیگری) تبدیل کرد.


SELECT Categories.* INTO Table1 IN "Address Of database" FROM Categories

حالا اگر دیتابیس ما SQL Server 2000 باشد و بخواهیم از طریق دستورات SQL و از روی دیتاستی که براساس داده‌های بانک SQL Server ایجاد شده است، یک جدول اکسس بسازیم، نحوه کار چگونه باید باشد؟
من به همان شکل بالا نام جدول و مسیر آدرس بانک mdb را می‌دهم ولی خطای سینتکس می‌دهد.

با تشکر

AminSobati
دوشنبه 14 اسفند 1385, 22:38 عصر
SELECT * INTO NewTable FROM MainTable

A.Farzin
چهارشنبه 16 اسفند 1385, 18:09 عصر
استاد ارجمند جناب آقای ثباتی
با سلام و تشکر
دستور SQL بالا اقدام به ساخت New Table در داخل همان دیتابیس SQL Server می‌کند. ببینید، Connection من به یک دیتابیس SQL Server زده شده است و من می‌خواهم که این New Table در درون یک دیتابیس mdb (که در یک مسیر مشخص قرار دارد) ساخته شود.
خیلی ممنون

darvishiali
چهارشنبه 16 اسفند 1385, 21:37 عصر
سلام؛

برای انتقال دیتا از SQL Server به Access یا DBMS های دیگه، میتونی از تابع OPENROWSET استفاده کنی که Syntax اون اینجوریه :



OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'FullMDBPath';'USER';'PASSWORD', TableName)


البته این مثال برای ارتباط با Jet هست که Provider معروف مایکروسافت برای ارتباط با DB های Package های خودش مثل MS Office هست.

بجای FullDBPath مسیر و فایل mdb دیتابیس Access رو قرار بده.
بجای USER ، نام کاربر دیتابیس اکسس رو بذار (اگه کاربر خاصی تعریف نکردی، admin بذار)
بجای PASSWORD ، رمز عبورتو بذار (اگه نداری، فقط '' باشه)
بجای TableName ، اسم جدول موجود در بانک Access رو بذار

حالا میتونی از این نتیجه بعنوان یک rowset_function در SQL Server استفاده کنی.

اینجوری میتونی توش INSERT کنی:



INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'FullMDBPath';'USER';'PASSWORD', TableName)
(Col1, Col2) VALUES (Val1, Val2)



حالا فرض کن میخوای یه Result Set رو بریزی توی اون جدولی که در Access موجود است :



INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'FullMDBPath';'USER';'PASSWORD', TableName)
(Col1, Col2) SELECT ColName1, ColName2 FROM TableName2



بازهم اگه دوستان بتونن بیشتر راهنمایی کنن، خوشحال میشیم

موفق باشید

A.Farzin
یک شنبه 20 اسفند 1385, 19:12 عصر
با تشکر از darvishiali

راه‌حل مفیدی بود، خیلی ممنون ولی همانطوریکه گفتید، در این راه‌حل لازم است تا جدول از قبل موجود باشد.
چگونه همینکار را انجام دهیم به شکلی که جدول را هم براساس قیلدهای رکوردست، خودش بسازد.

خیلی سپاسگزار

AminSobati
چهارشنبه 08 فروردین 1386, 18:02 عصر
من با Access چندان آشنایی ندارم، ببینین این میتونه کمک کنه؟
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1165121&SiteID=1

hmm
جمعه 10 فروردین 1386, 23:45 عصر
اگه بصورت متعدد از این query استفاده میکنید میتونید یه link table به اون جدول sql بسارید و کد خودتون تو پست اول رو اجرا کنید

A.Farzin
دوشنبه 10 اردیبهشت 1386, 05:36 صبح
سلام؛


حالا فرض کن میخوای یه Result Set رو بریزی توی اون جدولی که در Access موجود است :



INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'FullMDBPath';'USER';'PASSWORD', TableName)
(Col1, Col2) SELECT ColName1, ColName2 FROM TableName2




بله بالاخره همین روش را مناسبتر دیدم به این ترتیب که با Create Table ابتدا جدول مورد نظرم را در Access ساختم آنگاه با INSERT INTO OPENROWSET داده‌هایم را به جدول MDB وارد کردم.
اما
این دستور به سادگی در QA و همچنین EM از SQL Server و از همه مهمتر در DE محیط VB 6.0 به سادگی اجرا شد. ولی وقتی آن را در داخل کدهای VB6 به شکل زیر استفاده کردم


With DaraEnv1.conExe_InTT
If .State = 0 Then .Open
.BeginTrans
.Execute "INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" & App.Path & "\LocalData\TmpTables.mdb'; 'Admin'; '', TmpTrnsTable) " & _
"(Sub1, Sub2, Sub3, Sub4, Sub5) " & _
"SELECT Sub1, Sub2, Sub3, Sub4, Sub5 " & _
"From MasterTransactions"
.CommitTrans
End With

اولش خطای 8501 اومد و گفت MSDTC on server 'Server1' is unavaliable که لازم بود تا سرویسDistiduted Transaction Coordiator اجرا کنم و شد. ولی باز هم به خطای 7391 برخوردم که بود The operation could not be performed because the OLE DB provider 'Microsoft.Jet.OLEDB.4.0' was unable to begin a distributed transaction.

اگر دوستان راهنمائی کنند بسیار ممنون می‌شوم.