PDA

View Full Version : مشكل در جلوگيري از import جداول



sabaie
چهارشنبه 12 شهریور 1393, 11:33 صبح
نمونه كدي مي خواهم كه كسي نتونه جدوال و كوئري هاي را از فايل اصلي import كنه

mohamad goodarzi
پنج شنبه 13 شهریور 1393, 07:35 صبح
با سلام
راهي براي جلوگيري از import وجود ندارد فقط بايد اطلاعات را با كد وارد جدول ها كنيد كه براي ديگران قابل استفاده نباشد.

sabaie
پنج شنبه 13 شهریور 1393, 14:33 عصر
چرا وجود دارد با يه دستور به نام Front End

sabaie
یک شنبه 16 شهریور 1393, 08:56 صبح
سلام كسي از بزرگان نمي تونه كمك كنه

ابوالفضل عباسی
یک شنبه 16 شهریور 1393, 10:38 صبح
sabaie عزیز راهی وجود ندارد همان طورکه دوست عزیز محمد گودرزی گفت.
البته الان راهی وجود ندارد اما اگر برنامه نویسی که شاید مشکلت حل بشه.
مثلا در c++ یا delphi برنامه بنویسی که از import جلوگیری کنه.

amirzazadeh
یک شنبه 16 شهریور 1393, 18:22 عصر
سلام كسي از بزرگان نمي تونه كمك كنه
سلام
براي محافظت از جداول ميتونيد در اكسس 2007 به بالا در قسمت BACEK EDND از رمزهاي مناسب استفاده كنيد كه امنيت فابل قبولي دارند ولي نكته مهمتر اينكه اگر شما ميخواهيد در قسمت FRONT END اثري از جداول نباشه (چه به صورت لينك شده و چه به شكل adp متصل به sql )شما ميتونيد با استفاده از فر م هاي باند نشده و كانكشن استرينگ به جداول وصل و اطلاعات رو از اونها استخراج كنيد.

sabaie
دوشنبه 17 شهریور 1393, 08:57 صبح
سلام ممنون
من مشكلم اينكه كه اين BACEK EDND و FRONT END رو نمي دونم چيه

mohamad goodarzi
دوشنبه 17 شهریور 1393, 13:51 عصر
سلام
براي محافظت از جداول ميتونيد در اكسس 2007 به بالا در قسمت BACEK EDND از رمزهاي مناسب استفاده كنيد كه امنيت فابل قبولي دارند ولي نكته مهمتر اينكه اگر شما ميخواهيد در قسمت FRONT END اثري از جداول نباشه (چه به صورت لينك شده و چه به شكل adp متصل به sql )شما ميتونيد با استفاده از فر م هاي باند نشده و كانكشن استرينگ به جداول وصل و اطلاعات رو از اونها استخراج كنيد.
با سلام
در صورت امكان نمونه فايلي كه انجام گرفته قرار دهيد.
با تشكر

amirzazadeh
دوشنبه 17 شهریور 1393, 21:34 عصر
سلام
يك نمونه2007 آماده كردم كه از دو تافايل front و back تشكيل شده كه با استفاده از كد هاي ذيل اطلاعات از بانك back اسخراج و در ليست باكس فرم front ريخته ميشه.كدها به خاطر پسورد كامپايل شدند.

Private Sub Form_Load()
Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset

Cn.ConnectionString = "Provider =Microsoft.ace.OLEDB.12.0;Persist Security Info=false;" _
& "Data Source=" + Application.CurrentProject.Path + "\back.accdb;Jet OLEDB:Database Password=*****;"
Cn.Mode = adModeReadWrite
On Error GoTo ErrH
Cn.Open
Rs.Open "Select * From table1 ", Cn, adOpenDynamic, adLockOptimistic, 1
Rs.MoveFirst
List0.AddItem Item:="FirstName ; FamilyName"
Do Until Rs.EOF

List0.AddItem Item:="'" & Rs.Fields("fname") & "';'" & Rs.Fields("lname") & "'"
Rs.MoveNext
Loop
List0.Requery

Set Rs = Nothing
Set Cn = Nothing
Exit Sub
ErrH:
If Err = -2147467259 Then
MsgBox "ÝÇíá ÓÑæÑ ÏÑ ÂÏÑÓ " & vbCr & CurrentProject.Path & vbCr & _
" æÌæÏäÏÇÑÏ", vbMsgBoxRight + vbCritical, "ÎØÇí ÇÊÕÇá Èå ÓÑæÑ"
End If
Set Rs = Nothing
Set Cn = Nothing
End Sub

sabaie
دوشنبه 24 شهریور 1393, 14:01 عصر
ممنون ميشه بيشتر توضيح بدين در ضمن pass فايلتون چيه

amirzazadeh
دوشنبه 24 شهریور 1393, 17:32 عصر
سلام
پسوردفايل

@#51667$
همونطور كه ميبينيد دو تا فايل هستند اولي Back كه فقط جداول و احيانا كوئري ها رو توش ذخيره مي كنيم و دومي Front كه فقط فرم ها گزارشات و كدهاي اونها رو توش ذخيره ميكنيم بعد بين اين دو تا از طريق كد نويسي ارتباط برقرار ميكنيم.
..............
موفق باشيد

sabaie
چهارشنبه 26 شهریور 1393, 09:05 صبح
سلام منظور اينكه كه اين كد رو تو فايل دوم كجا بايد بنويسم فايلتون هم mde اگه ميشه mdb روز بذارين

amirzazadeh
چهارشنبه 26 شهریور 1393, 09:42 صبح
سلام
در رويداد لود فرم ولي بسته به نياز در رويداد هاي ديگه هم قابل استفاده است.

AbbasSediqi
چهارشنبه 26 شهریور 1393, 17:38 عصر
دوست عزیز با سلام
اگر میخواهید مثل نمونه ای که گذاشتید عمل کنید خوب چرا با اکسس برنامه تولید میکنید بهتره بی با vb این کار رو بکنی چون دقیقا این روش ارتباط برای برنامه نویسی با زبان های برنامه نویسی هستش . البته قابل تقدیره ولی برای اکسس زیاده

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

دوست گرامی شمادر Load فرم Tablelink رو بساز و بعد فرم رو recalce کن و در unload اون TableLink رو Delete کن

amirzazadeh
چهارشنبه 26 شهریور 1393, 19:48 عصر
دوست عزیز با سلام
اگر میخواهید مثل نمونه ای که گذاشتید عمل کنید خوب چرا با اکسس برنامه تولید میکنید بهتره بی با vb این کار رو بکنی چون دقیقا این روش ارتباط برای برنامه نویسی با زبان های برنامه نویسی هستش . البته قابل تقدیره ولی برای اکسس زیاده

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

دوست گرامی شمادر Load فرم Tablelink رو بساز و بعد فرم رو recalce کن و در unload اون TableLink رو Delete کن

سلام
دليل اينكه با كدهاي vba پاسخ داده شده خيلي روشنه .چون اينجا تالار اكسسه نه تالار vb
در مورد قسمت دوم هم اگه با نمونه توضيح بدين بهتر خواهد بود.
...........................
موفق باشيد

AbbasSediqi
پنج شنبه 27 شهریور 1393, 00:08 صبح
حرف شما کاملا درست اما این روش دقیقا یکی از روش های استفاده از دیتابیس و مخصوصا با برنامه نویسی vb هشتش اما جناب آقای
amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh)
یک سوال و اون هم اینکه این همه زحمت برای تعریف دیتا کانکشن و بعد ادامه ماجرا در اکسس درسته ؟
خوب چرا این همه زحمت برا این کار . روش شما کاملا درسته اما در اکسس هم همین طوره ؟
پس فلسفه Table Link چیه که مایکروسافت در این برنامه بوجود آورده . درحقیت این همون معادل Dataset در visual Studio هستش
نمونه هم قرار دادم

یا حق

amirzazadeh
پنج شنبه 27 شهریور 1393, 10:07 صبح
سلام
نمونه شما رو ديدم چند تا نكته توش بود كه لازم ديدم در موردش توضيح بدم:
اول اينكه جدول table1 در فايل test درست آپلود نشده واسه همين نمونه درست عمل نميكنه.
دوم اينكه بعد از لود فرم كافيه روي فرم راست كليك كرده و نماي layout رو انتخاب كنيد و جدول لينك شده به راحتي در دسترس شما خواهد بود.
و نكته آخر اينكه آيا به نظر شما نوشتن پنج خط دستور براي ارتباط با ديتابيس راحتتره يا كد مورد استفاده شما؟!؟

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset


Cn.ConnectionString = "Provider =Microsoft.ace.OLEDB.12.0;Persist Security Info=false;" _
& "Data Source=" + Application.CurrentProject.Path + "\back.accdb;Jet OLEDB:Database Password=*****;"

Cn.Mode = adModeReadWrite

On Error GoTo ErrH
Cn.Open


كد مورد استفاده شما:


Option Compare Database

'CheckTableLinkConnected Argoment Type
Private Type TLCArgomentType
OnlyTest As Integer
AllConditionDeleteTable As Integer
DeleteDevastatedTableLink As Integer
NotExist As Integer
ExistAndNotConnect As Integer
ExistAndConnect As Integer
ExistButDeleted As Integer
End Type
'CheckTableLinkConnected Mode Constants
Public Enum TLCModeConstants
OnlyTest = 0
DeleteDevastatedTableLink = 1
AllConditionDeleteTable = 2
End Enum
'CheckTableLinkConnected DTATA Type
Public Enum TLCDtataType
NotExist = 0
ExistAndNotConnect = 1
ExistAndConnect = 2
ExistButDeleted = 3
End Enum

'CheckDBConnection Argoment Type
Private Type CBCCArgomentType
Connected As Integer
NotConnected As Integer
End Type
'CheckDBConnection DTATA Type
Public Enum CBCCDtataType
Connected = 0
NotConnected = 1
End Enum

'CheckDBConnection Argoment Type
Private Type CTLArgomentType
Added As Integer
NotAdded As Integer
End Type
'CheckDBConnection DTATA Type
Public Enum CTLDtataType
Added = 0
NotAdded = 1
End Enum

'CheckDBConnection Argoment Type
Private Type TLUArgomentType
Message As Integer
Condition As Integer
End Type
'CheckDBConnection Mode Constants
Public Enum TLUConstants
Message = 0
Condition = 1
End Enum

Private Function TableLinkCondition(TableName, Optional Mode As TLCModeConstants = OnlyTest) As TLCDtataType
On Error GoTo Error

DoCmd.OpenTable TableName, acViewNormal
DoCmd.Close acTable, TableName
If Mode = AllConditionDeleteTable Then
DoCmd.DeleteObject acTable, TableName
TableLinkCondition = ExistButDeleted
Else
TableLinkCondition = ExistAndConnect
End If

Error:
If ERR.Number = 7873 Then
TableLinkCondition = NotExist
ElseIf ERR.Number = 3024 Then
If Mode = OnlyTest Then
TableLinkCondition = ExistAndNotConnect
Else
DoCmd.DeleteObject acTable, TableName
TableLinkCondition = ExistButDeleted
End If
End If
End Function

Private Function CheckDBConnection(DBPath As String, DBPassword As String) As CBCCDtataType
On Error GoTo Error

PWD = ";pwd=" & DBPassword
Dim DB As DAO.Database
Set DB = DBEngine.OpenDatabase(DBPath, False, False, PWD)
CheckDBConnection = Connected

Error:
If ERR.Number = 3031 Or ERR.Number = 3024 Then
CheckDBConnection = NotConnected
End If
End Function

Private Function CreateTableLink(TableName, DBPath As String, DBPassword As String) As CTLDtataType
On Error GoTo Error

PWD = ";pwd=" & DBPassword
Dim DB As DAO.Database
Set DB = DBEngine.OpenDatabase(DBPath, False, False, PWD)
DBEngine.DefaultPassword = PWD
DoCmd.TransferDatabase acLink, "Microsoft Access", DBPath, acTable, TableName, TableName, True
CreateTableLink = Added

Error:
If ERR.Number = 3011 Then
CreateTableLink = NotAdded
End If
End Function

Private Function DBConnectionUpdate(TablesName, DBPath As String, DBPassword As String) As String
Dim TablesCount As Integer
Dim TablesAdd As Integer
Dim TablesNotAdd As String
Dim TablesAdded As String
TablesCount = 0
TablesAdd = 0

If CheckDBConnection(DBPath, DBPassword) = Connected Then

For Each Item In TablesName
TablesCount = TablesCount + 1
TableLinkCondition Item, AllConditionDeleteTable
If CreateTableLink(Item, DBPath, DBPassword) = Added Then
TablesAdd = TablesAdd + 1
TablesAdded = TablesAdded & " ; " & Item
Else
TablesNotAdd = TablesNotAdd & " ; " & Item
End If
Next

Else
Exit Function
End If

Dim AL, FL As Integer
Dim FNB, FNU As String
AL = Len(DBPath)
FL = InStrRev(DBPath, "\", , vbTextCompare)
FN = Left(Right(DBPath, AL - FL), (AL - FL) - 0)

If TablesAdd = TablesCount Then
TablesAdded = Right(TablesAdded, Len(TablesAdded) - 3)
DBConnectionUpdate = TablesAdd & " Tables : ( " & """" & TablesAdded & """" & " ) From : ( " & """" & FN & """" & " ) Added"
Else
TablesNotAdd = Right(TablesNotAdd, Len(TablesNotAdd) - 3)
DBConnectionUpdate = (TablesCount - TablesAdd) & " Tables : ( " & """" & TablesNotAdd & """" & " ) From : ( " & """" & FN & """" & " ) NotAdded"
End If
End Function

Public Function TablesLinkUpdate(TablesName, DBPath As String, DBPassword As String, Mode As TLUConstants) As String
If Mode = Condition Then
If Right(DBConnectionUpdate(TablesName, DBPath, DBPassword), 8) = "NotAdded" Then
TablesLinkUpdate = False
Else
TablesLinkUpdate = True
End If
Else
TablesLinkUpdate = DBConnectionUpdate(TablesName, DBPath, DBPassword)
End If

End Function


قضاوت با خودتون.

AbbasSediqi
پنج شنبه 27 شهریور 1393, 18:45 عصر
در جواب
اولا در هر حالت که تغییری در حالت دیدن فرم ایجاد بشه table link پاک میشه و اگر فایل مورد نظر که اینجا محافظت نشده (چون نمونه است) محافظت بشه دیدن کد ها و بقیه چیز ها غیر ممکنه
دوم این همه کد صرفا برای ایجاد دقیق و کامل tablelink شاید به نظر شما غلط باشه و یا زیادی اما سوال من همچنان پا برجاست

این کد فقط یک بار در اول کاره اما طریق شما برای هر کنترل نیاز به کد نویسی داره و برای هر حالت و هر تغییر و هر آپدیت هر کنترلی نیاز به کد نویسی داره و در حجم تعداد فرم بالا تعداد خط برنامه نویسی به طریق شما به راحتی چندین برابر این چند خط خواهد بود

دوم و سوال اصلی : اگر بخواهیم از روش شما استفاده بکنیم چرا این همه کار رو در اکسس انجام بدیم؟
خوب در vb یه برنامه بنویسیم که لااقل فایل exe در آخر تحویل بگیریم نه یه فایلی که برای اینکه محافظتش بکنیم باید کلی کار بکنیم که باز در آخر امر قابل کرک شدنه


شما جواب این سوال من رو بدید .ممنونتون میشم

این راه حل بنده لااقل حالت اکسس رو حفظ و باعث استفاده از حالت های پیش فرض اکسس میشه

در ضمن بنده به شخصه از روش دقیقا مشابه روش شما در برنامه نویسی استفاده میکنم البته در vb نه در access
امید وارم قانع کننده باشه

یاحق