PDA

View Full Version : برگرداندن نام جداول موجود درون یک دیتابیس



baran_mehr
چهارشنبه 20 شهریور 1387, 18:32 عصر
سلام خدمت همه دوستان عزیز.:قلب:
آیا دستوری هست که ما نام دیتا بیس رو بهش بدیم و اون نام جداول موجود در اون رو برگردونه.
فرض کنید ما یه دیتابیس داریم با نام Full که میخوایم بدونیم چه جداولی داخل اون وجود داره مثلا این جداول توش هست(info , data , std) و اون دستور اینها رو برگردونه:تشویق:

anubis_ir
چهارشنبه 20 شهریور 1387, 18:53 عصر
USE dbName;
SELECT A.TABLE_NAME, B.COLUMN_NAME, B.DATA_TYPE, B.IS_NULLABLE
FROM INFORMATION_SCHEMA.TABLES A, INFORMATION_SCHEMA.COLUMNS B
WHERE A.TABLE_NAME = B.TABLE_NAME
ORDER BY A.TABLE_NAME, B.COLUMN_NAME

بجاي dbName نام ديتابيس خودتون رو قرار بديد.

baran_mehr
پنج شنبه 21 شهریور 1387, 09:36 صبح
anubis_ir جان اینو نوشتم اما کار نکرد.

bijanjafari
پنج شنبه 21 شهریور 1387, 12:22 عصر
كد من ساده كردم جواب داد اينو امتحان كن


USE Full
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

baran_mehr
پنج شنبه 21 شهریور 1387, 18:30 عصر
bijanjafari جان میشه این کد رو یکم توضیح بدید. و آیا فقط روی SQL اجرا میشه و روی بانکهای اکسس کار نمیکنه؟

bijanjafari
شنبه 23 شهریور 1387, 07:48 صبح
با سلام
اين كد در ديتابيسي كه گفتي يعني Full مياد و يك ستون از يك جدول سيستمي رو كه درونش اطلاعات جداول بانك درون ذخيره ميشه ميده و داراي يك شرطي است كه فقط جداول اصلي كه كاربر ساخته را مي دهد .و شما اگه شرطشو حذف كنيد مي بينيد كه كلي جدول ميده با type هاي مختلف. موفق باشين.:لبخندساده:

mehrnoosh_al62
شنبه 23 شهریور 1387, 07:55 صبح
از کد زیر هم میتونی استفاده کنی :


SELECT NAME FROM sysobjects WHERE xtype='u'


این query جداول که کاربر ایجاد کرده رو بر میگردونه

baran_mehr
شنبه 23 شهریور 1387, 23:25 عصر
از همه دوستان گلم ممنون.:قلب::قلب:
اما نمیدونم چرا این دستورا روی بانک اکسس کار نمیکنه.یعنی دستور SQL نیست که همین کار رو روی بانک اکسس انجام بده؟
من فایل اکسس رو اینجا میزارم اگه یکی از دوستان بتونه یه query برای اون بنویسه که این کار رو انجام بده ممنون میشم.:بوس:

baran_mehr
شنبه 23 شهریور 1387, 23:28 عصر
از دوستان معذرت میخوام .فکر کنم بهتر بود از اول این سوال رو تو این بخش میپرسیدم.ممنون از لطفتون

رضا عربلو
شنبه 23 شهریور 1387, 23:52 عصر
از همه دوستان گلم ممنون.:قلب::قلب:
اما نمیدونم چرا این دستورا روی بانک اکسس کار نمیکنه.یعنی دستور SQL نیست که همین کار رو روی بانک اکسس انجام بده؟
من فایل اکسس رو اینجا میزارم اگه یکی از دوستان بتونه یه query برای اون بنویسه که این کار رو انجام بده ممنون میشم.:بوس:
چون هیچ یک از جداول sysobjects , INFORMATION_SCHEMA.TABLES و ... در اکسس وجود ندارند. این جداول و ویو ها تنها مختص اس کیو ال هستند که دریتا بیس Master قرار دارند برای نگهداری اطلاعات آبجیکتهای موجود در دیتابیس ها و ...

مهدی قربانی
یک شنبه 24 شهریور 1387, 01:32 صبح
سلام
با استفاده از VBA هم مي تونيد به خواسته خودتون برسيد
در يك فرم يك كامند باتون بذاريد بعد در رخداد On Click اون كدهاي زير رو Past‌ كنيد و بجاي مسير موجود مسير كامل ديتابيس مورد نظرتون رو جايگزين كنيد ، بعد از كليك روي اين كامند باتون شما نام جداول موجود در بانك خارجي رو در قالب Msgbox مشاهده خواهيد كرد .

Dim db As Database
Dim Tbl As TableDef
Dim TblNames As String
Dim TblCount As Integer
Set db = OpenDatabase("D:\Documents and Settings\mahdi\Desktop\Where Condition.mdb")
TblCount = 0
For Each Tbl In db.TableDefs
If Tbl.Attributes = 0 Then
TblNames = TblNames & Tbl.Name & ";"
TblCount = TblCount + 1
End If
Next
TblNames = TblNames

MsgBox TblNames

db.Close
Set db = Nothing

شاپرک
یک شنبه 24 شهریور 1387, 07:55 صبح
لیست تمامی Object ها : فرمها- جداول - Query ها - ماکرو ها و .......

karmand
یک شنبه 24 شهریور 1387, 12:21 عصر
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.name = "backup" Then
DoCmd.DeleteObject acTable, "backup" 'ÇÑ ÇÒ ÞÈá ÌÏæáí ÈÇ Çíä äÇã ÈæÏ ÍÐÝ ãí ˜äÏ

End If
Next obj

در کد بالا دنبال جدول backup میگردد اگر پیدا کرد حذف می کند
قسمتی که حروف درهم داری چیزی نیست توضیح برای خودم نوشتم

karmand
یک شنبه 24 شهریور 1387, 12:24 عصر
در کد بالا دنبال جدول backup میگردد اگر پیدا کرد حذف می کند
قسمتی که حروف درهم داری چیزی نیست توضیح برای خودم نوشتم

baran_mehr
یک شنبه 24 شهریور 1387, 12:43 عصر
سلام دوستان گلم
ممنون از راهنمایهاتون.
اما من میخوام دستوری رو که این کار رو روی بانک اکسس انجام میده رو داخل برنامه VB.NET یا #C نه داخل خود اکسس.

مهدی قربانی
یک شنبه 24 شهریور 1387, 13:22 عصر
سلام
دوست گرامي در اينصورت بايد اين سئوال رو در همون بخشها طرح كنيد !

رضا عربلو
یک شنبه 24 شهریور 1387, 14:59 عصر
در C# می توانید از کدهای زیر استفاده کنید.


using System.Data;
using System.Data.Common;



// Microsoft Access provider factory
DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.OleDb");
DataTable userTables = null;
using (DbConnection connection =
factory.CreateConnection())
{
// c:\test\test.mdb
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test\\test.mdb";

// We only want user tables, not system tables
string[] restrictions = new string[4];
restrictions[3] = "Table";

connection.Open();

// Get list of user tables
userTables =
connection.GetSchema("Tables", restrictions);
}
// Add list of table names to listBox
for (int i=0; i < userTables.Rows.Count; i++)
listBox1.Items.Add(userTables.Rows[i][2].ToString());

karmand
دوشنبه 25 شهریور 1387, 07:38 صبح
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.name = "backup" Then
DoCmd.DeleteObject acTable, "backup"

baran_mehr
سه شنبه 26 شهریور 1387, 11:42 صبح
داداشی دستت درد نکنه(رضا عربلو) همینو میخواستم که دادی.مرسی گلم
karmand جان نوع(AccessObject)رو نمیشناسه

zarrin_306
شنبه 13 مهر 1387, 16:44 عصر
اینم کد کامل هم برای اکسس و هم برای sql

mports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'In Access
Try
Dim mysqlconn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=E:\vbdotnet PRJ\Agance\bin\Agent-db.mdb;Jet OLEDB:Engine Type=5;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1")

mysqlconn.Open()

Dim scmd As New OleDbCommand("select * from sysobjects where xtype='u' ", mysqlconn)

scmd.CommandType = CommandType.Text

Dim newdr As OleDbDataReader = scmd.ExecuteReader
ListBox1.Items.Clear()

If newdr.Read() Then
ListBox1.BeginUpdate()

Do While newdr.Read
ListBox1.Items.Add(newdr.Item("Name").ToString())

Loop
ListBox1.EndUpdate()
End If

mysqlconn.Close()
mysqlconn.Dispose()

Catch err As Exception
MsgBox(err.Message)

Catch err As OleDbException
MsgBox(err.Message)

End Try
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' in SQL
Try
Dim mysqlconn As SqlClient.SqlConnection = New SqlClient.SqlConnection("server=Locallhost;integrated Security=SSPI;initial catalog=AccountDb")
mysqlconn.Open()

Dim scmd As New SqlCommand("select * from sysobjects where xtype='u' ", mysqlconn)

scmd.CommandType = CommandType.Text

Dim newdr As SqlDataReader = scmd.ExecuteReader
ListBox1.Items.Clear()

If newdr.Read() Then
ListBox1.BeginUpdate()

Do While newdr.Read
ListBox1.Items.Add(newdr.Item("Name").ToString())

Loop
ListBox1.EndUpdate()
End If

mysqlconn.Close()
mysqlconn.Dispose()

Catch err As Exception
MsgBox(err.Message)

Catch err As SqlException
MsgBox(err.Message)

End Try
End Sub

اینم پروژه در زیر هستش.

SMRAH1
شنبه 13 مهر 1387, 19:46 عصر
البته دوستان راه کارها را نوشته اند ولی دستور معادل Access برای یک query یافتن جداول در access چیزی شبیه دستور پایینه:


Select *
From MSysAccessObjects

karmand
دوشنبه 15 مهر 1387, 06:59 صبح
Public Sub serch_tbl()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.name = "backup" Then
DoCmd.DeleteObject acTable, "backup" 'ÇÑ ÇÒ ÞÈá ÌÏæáí ÈÇ Çíä äÇã ÈæÏ ÍÐÝ ãí ˜äÏ

End If
Next obj
End Sub

baran_mehr
دوشنبه 15 مهر 1387, 07:30 صبح
SMRAH1 جان من کد شما رو امتحان کردم ولي يه سري چيز ميده که نام جداول نيست.نميدونم براي استفاده از اين کد بايد تغييري توش داد؟؟

baran_mehr
دوشنبه 15 مهر 1387, 07:34 صبح
zarrin_306 جان ممنون از برنامه اي که گذاشتيد.
ميشه در رابطه با کد زير يه توضيحي به من بديد:

Dim scmd As New OleDbCommand("select * from sysobjects where xtype='u' ", mysqlconn)

SMRAH1
دوشنبه 15 مهر 1387, 08:08 صبح
ببخشید اشتباه شده بود،کد اینه.به ستون Name بیشتر توجه کنید.(تشخیص این که کدوم جدول است و کدام query و .. هم با تلفیقی از مقادیر ستونهای دیگر است)


SELECT *
FROM MSysObjects;

baran_mehr
دوشنبه 15 مهر 1387, 23:46 عصر
سلام عزیزم.
گلم خروجی دستوری که گذاشتی این عکس هست که فکر نکنم جواب باشه.یه نگاهی کنید .
ممنون.

karmand
سه شنبه 16 مهر 1387, 06:54 صبح
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.name = "backup" Then
DoCmd.DeleteObject acTable, "backup"

End If
Next obj

baran_mehr
سه شنبه 16 مهر 1387, 13:38 عصر
karmand جان شما این دستور رو چند بار تو این تایپیک گذاشتید.اگر به صفحه های قبل هم نگاه کنید این تیکه کد رو میبینید. اما در زمینه کدتون قسمت Dim obj As AccessObject کار نمیکنه و به نوع AccessObject خطا میگیره.
ممنون

eli_joon
یک شنبه 12 آبان 1387, 12:42 عصر
zarrin_306 لطفا در مورد تکه کدی که نوشتید یکم توضیح دهید . ممنون :
کد:

(Dim scmd As New OleDbCommand("select * from sysobjects where xtype='u' ", mysqlconn