View Full Version : کانکشن استرینگ داینامیک در گزارش
nima_dir
پنج شنبه 03 بهمن 1387, 15:18 عصر
سلام دوستان
من یه سوالی داشتم.چطور میشه کانکشن استرینگی که گزارش استفاده میکنه همونی باشه که برنامه استفاده میکنه.مظورم اینه که مثلا من الان دارم یه گزارش مینویسم.وقتی که میبرم رو یه سیستم دیگه میخوام اجرا کنم بخاطر اینکه نام کامپیوتر ها فرق داره کار نمیکنه و مجبورم دوباره از اول دیتاست اولیه رو بسازم و دوباره حتی فیلدها رو بکشم رو گزارش. چطور میشه هر جایی که رفت این گزارش بدون مشکلی اجرا بشه(مثلا موقع اجرای برنامه یه کادری باز بشه و نام کامپیوتر وارد بشه) .
ممنون میشم من رو راهنمایی کنین
MORTEZA66
پنج شنبه 03 بهمن 1387, 15:42 عصر
پاسخ شما رو در اين لينك دادم
بازم اگه جايي سوال داشتيد در خدمتيم
http://barnamenevis.org/forum/showthread.php?t=141027
nima_dir
پنج شنبه 03 بهمن 1387, 17:52 عصر
سلام
ممنون ولی من مشکلم با خوده کانکشن استرینگ و ساختنش نیست مشکل من اینه که وقتی گزارشم (یعنی سورس برنامه) میره رو یه سیستم دیگه وقتی همه چیز درسته و دیتابیس هم اتچ شده کار نمیکنه یعنی یه کادری باز میشه میگه ادرس دیتابیس رو بده.گزارش من فیلدها رو نمیشناسه
saied_genius
پنج شنبه 03 بهمن 1387, 18:34 عصر
نگفته ايد با چه زبان برنامه نويسي كار مي كنيد...
در هر حال شما مي توانيد در محيط برنامه نويسي مسير connection string را بدهيد به صورت ديناميكي و هيچ مشكلي پيش نمي آيد.
اگر connection string شما به فرض computerName\sqlexpress است آن را به sqlexpress\. يا local\sqlexpress تبديل كنيد.
اگر هم instance نداريد، فقط كلمه (local) كافيست.
سوالي بود در خدمتم.
موفق باشيد.
nima_dir
پنج شنبه 03 بهمن 1387, 22:10 عصر
سلام دوست عزیز
من از پاسخ شما.اما این چیزی که فرمودین قسمتی از راه حله.ببینین من در شروع برنامم اگر نتونم به دیتابیسم وصل بشم یه فرم باز میکنم که توش نام کامپیوتر(یا آی پی) و حالا یوزر نیم و پسورد و این چیزا رو میگیرم.مسئله اینجاس که این کانکشن ممکنه تغییر کنه چون ممکنه آی پی ها رو شبکه تغییرکنه.وقتی که آی پیه سرور تغییر کنه همه جا درست کار میکنه اما گزارشا رو چون با ویزازد ساختم این تغییر بهش اعمال نمیشه یعنی کانکشن استرینگه مربوط به گزارش همچنان همون قبلیه میمونه.میخوام اگر کانکشن استرینگ تو برنامم تغییرکرد به گزارش هم اعمال بشه.امیدوارم خوب گفته باشم.
در ضمن من با C# و SQL Server 2005 کار میکنم
موفق باشید
saied_genius
شنبه 05 بهمن 1387, 16:01 عصر
ببينيد .... شما براي وصل شدن به سرور در گزارشتون از نام سرور اگر استفاده كنيد مشكل پيش نمي آيد.
احتمالاً شما در connection string خود از IP سرور استفاده كرده ايد. درست است؟
اگر چنين است ، بهتر است از همان نام سرور استفاده نماييد تا مشكلي پيش نيايد.
اگر بتوانيد بگوييد دقيقاً چي نوشتيد در crystal reprot به عنوان connection string و از چه نinstance از sql server داريد استفاده مي كنيد ، بهتر مي توانم راهنمايي تان كنم.
در crystal reports بر روي database fields كليك راست نموده و database expert را انتخاب نماييد.
سپس در قسمت سمت راست عنوان connection شما چيست.
عكس ضميمه را ببينيد و بگوييد شما چگونه آنرا تنظيم كرده ايد .....
kiosksoft
دوشنبه 07 بهمن 1387, 11:41 صبح
سلام
ممنون ولی من مشکلم با خوده کانکشن استرینگ و ساختنش نیست مشکل من اینه که وقتی گزارشم (یعنی سورس برنامه) میره رو یه سیستم دیگه وقتی همه چیز درسته و دیتابیس هم اتچ شده کار نمیکنه یعنی یه کادری باز میشه میگه ادرس دیتابیس رو بده.گزارش من فیلدها رو نمیشناسه
دوست عزیز
پیشنهاد من اینه که از یکODBC استفاده کنید , از یه طرف گزارشتون به هر سرور و دیتابیسی که خواست وصل میشه , از طرف دیگه نام اون همیشه در اختیار خودتون هست و هر جا که برنامه تون نصب شد میتونید براحتی روی هر سیستم عامل ی (xp,2003 server) اون رو ایجاد کنید.
nima_dir
دوشنبه 07 بهمن 1387, 11:48 صبح
سلام دوست عزیز
امکانش هست یه نمونه از طریقه استفاده از ODBC معرفی کنین.
ممنون از شما
kiosksoft
دوشنبه 07 بهمن 1387, 11:55 صبح
سلام
control panel>administrator tools>data source(odbc)l
system dsn
add
تا اینجا برو , رسیدی ,بگو تا بگم چیکار کن ..
OK?
nima_dir
دوشنبه 07 بهمن 1387, 11:59 صبح
سلام دوست عزیز
روش دیگه اجرای :odbccp32.cpl در پنجره Run
تا اینجاشو میدونستم نمیدونم تو گزارشام چجوری ازش استفاده کنم
ممنون
kiosksoft
دوشنبه 07 بهمن 1387, 12:05 عصر
الان odbc رو ساختین ؟ success connection داد ؟؟
nima_dir
دوشنبه 07 بهمن 1387, 12:12 عصر
سلام دوست عزیز
بله کانکشن رو تست کردم و Success داد
kiosksoft
دوشنبه 07 بهمن 1387, 12:23 عصر
تو چه محیطی گزارش تون رو میسازید ؟
تو vs یا تو خود محیط نرم افزار کیستال هستید ؟ بهتره برید تو همون vs , یه فایل گزارش به پروژه تون اضافه کنید , سمت چپ یک explorer هست به اسم field explorer , رو آیتم اول کلیک کنید , گزینه اول رو بزنید , یه پنجره باید باز بشه ... شد بگو که بقیه شو بگم , خودم یه کم کار دارم ...
nima_dir
دوشنبه 07 بهمن 1387, 12:25 عصر
منظورتون DataBase Expert هست؟خوب بله باز میشه من قبلا از اینجا اون دیتاست ها رو انتخاب میکردم
(یه سوال داخل پرانتز چرا همیشه این گزینه Show SQL Query من غیر فعاله؟)
kiosksoft
دوشنبه 07 بهمن 1387, 12:29 عصر
create new connetion
odbc
یه پنجره باز میشه , که باید تو لیستی که نمایش میده , نام odbc شما ظاهر شده باشه , میتونید از اون استفاده کنید.
نام odbc ثابت هستش , و نام دیتابیس و سرور هر چی و هرجا میخواد باشه .
nima_dir
دوشنبه 07 بهمن 1387, 12:31 عصر
بله درسته جدولاش رو هم دیدم.ممنون از لطف شما .یعنی برای یه سیستم دیگه من کافیه دیتابیس رو اونجا اتچ کنم و یه کانکشن ODBC بسازم و بعد بقیش حله؟هیچ تنظیم دیگه ای نیاز نداره؟
kiosksoft
دوشنبه 07 بهمن 1387, 12:35 عصر
بله , حله .. نیازی به انجام هیچ کار خاصی نیست.(فقط odbc همون نام باشه)
موفق باشید
یا حق
nima_dir
دوشنبه 07 بهمن 1387, 12:42 عصر
دست شما درد نکنه خیلی لطف کردین.یه سوال کوچک دیگه داشتم اینکه این کانکشن ODBC رو میشه از طریق برنامه هم ایجاد کرد؟مثلا از طریق کد نویسی تو VS و یا مثلا ساختن Setup
kiosksoft
دوشنبه 07 بهمن 1387, 13:02 عصر
نمیشه نداریم , یا راهی رو پیدا میکنیم , یا راهی رو میسازیم .
Hkey_Current_User/Software/ODBC/ODBC.INI
این مسیر نگاه کنید , ببینید متوجه میشید , که چی باید ثبت بشه , با نوشتن تو registery میتونید این کار انجام بدید . یک تابع API هم هست که این کارو انجام میده .
در مورد SQLConfigDataSource هم یه تحقیقی بکنید .
این یه کد : از یک
Option Strict Off
Option Explicit On
Friend Class Form1
Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
Public Sub New()
MyBase.New()
If m_vb6FormDefInstance Is Nothing Then
If m_InitializingDefInstance Then
m_vb6FormDefInstance = Me
Else
Try
'For the start-up form, the first instance created is the default instance.
If System.Reflection.Assembly.GetExecutingAssembly.En tryPoint.DeclaringType Is Me.GetType Then
m_vb6FormDefInstance = Me
End If
Catch
End Try
End If
End If
'This call is required by the Windows Form Designer.
InitializeComponent()
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)
If Disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(Disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
Public ToolTip1 As System.Windows.Forms.ToolTip
Public WithEvents Command1 As System.Windows.Forms.Button
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
Me.Command1 = New System.Windows.Forms.Button
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'Command1
'
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
Me.Command1.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Command1.Location = New System.Drawing.Point(112, 128)
Me.Command1.Name = "Command1"
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.Size = New System.Drawing.Size(81, 33)
Me.Command1.TabIndex = 0
Me.Command1.Text = "Create DSN"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(104, 64)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 1
Me.TextBox1.Text = ""
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(104, 88)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.TabIndex = 2
Me.TextBox2.Text = ""
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.BackColor = System.Drawing.SystemColors.Control
Me.ClientSize = New System.Drawing.Size(312, 206)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Command1)
Me.Cursor = System.Windows.Forms.Cursors.Default
Me.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Location = New System.Drawing.Point(4, 30)
Me.MaximizeBox = False
Me.Name = "Form1"
Me.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScree n
Me.Text = "Create DSN"
Me.ResumeLayout(False)
End Sub
#End Region
#Region "Upgrade Support "
Private Shared m_vb6FormDefInstance As Form1
Private Shared m_InitializingDefInstance As Boolean
Public Shared Property DefInstance() As Form1
Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
m_InitializingDefInstance = True
m_vb6FormDefInstance = New Form1()
m_InitializingDefInstance = False
End If
DefInstance = m_vb6FormDefInstance
End Get
Set
m_vb6FormDefInstance = Value
End Set
End Property
#End Region
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Integer
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
If TextBox1.Text = "[Server Name]" Or TextBox1.Text = "" Then
MsgBox("Inserte Server Name.", MsgBoxStyle.Information)
Exit Sub
End If
If TextBox2.Text = "[Database Name]" Or TextBox2.Text = "" Then
MsgBox("Insert Database Name.", MsgBoxStyle.Information)
Exit Sub
End If
Dim iReturn As Integer
Dim Attr As String
Dim machName As String = Trim(TextBox1.Text) 'Server Name.
Dim catelog As String = Trim(TextBox2.Text)
Attr = "SERVER=" & machName & "" & Chr(0)
Attr = Attr & "DSN=" & catelog & Chr(0)
Attr = Attr & "DESCRIPTION=DSN For HOSPITAL" & Chr(0)
Attr = Attr & "DATABASE=" + catelog & Chr(0)
Attr = Attr & "TRUSTED_CONNECTION=YES" & Chr(0)
iReturn = SQLConfigDataSource(0, 1, "SQL Server", Attr)
If iReturn Then
MsgBox("DSN setup complete successfully.", MsgBoxStyle.OkOnly + MsgBoxStyle.Information)
Else
MsgBox("DSN setup can not complete successfully.")
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = "[Server Name]"
TextBox2.Text = "[Database Name]"
End Sub
Private Sub TextBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.LostFocus
If TextBox2.Text = "" Then
TextBox2.Text = "[Database Name]"
End If
End Sub
Private Sub TextBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Click
If TextBox2.Text = "[Database Name]" Then
TextBox2.Text = ""
End If
End Sub
Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
If TextBox1.Text = "[Server Name]" Then
TextBox1.Text = ""
End If
End Sub
Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
If TextBox1.Text = "" Then
TextBox1.Text = "[Server Name]"
End If
End Sub
End Class
منبع کد :
_____________________________
dotnetspider.com
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.