PDA

View Full Version : مشكل با DataEnvironment



yshahab
پنج شنبه 10 اردیبهشت 1388, 14:20 عصر
سلام .
من يه مشكلي دارم با DataEnvironment و اون اينه كه وقتي از sql statement استفاده مي كنم اگر فيلدهايي كه تو datareport مي ذارم از يك table باشه مشكلي نيست و گزارش گيري كامله اما وقتي از table ديگه اي يه فيلد انتخاب مي كنم ديگه گزارش نمي ده ! كجاي كارم اشكال داره ؟؟!! در ضمن ديتابيس من اكسس .

xxxxx_xxxxx
پنج شنبه 10 اردیبهشت 1388, 19:57 عصر
خاصيت DataSource مربوط به DataReport موردنظر رو خالي بزارين. تو sql statement هم از ضرب دكارتي تيبل ها استفاده كنيد.
اگر متوجه نشديد دستوري كه تو sql statement نوشتيد رو اينجا بزاريد

yshahab
پنج شنبه 10 اردیبهشت 1388, 20:38 عصر
دوست خوبم من كدي ننوشتم ولي اگه منظورتون كدي هست كه در sql statement خودش مي نويسه اينه
SELECT Piece.Code, Piece.Description, Package.Name, Product.Name AS Expr1, Product.Code AS Expr2 FROM Piece, Package, Product WHERE Piece.Code = Package.Code AND Piece.Code = Product.Code
بايد دستي كدي مي نوشتم ؟!
در ضمن وقتي خاصيت datasource رو خالي ميذارم مينويسه Invalid Data Source

xxxxx_xxxxx
پنج شنبه 10 اردیبهشت 1388, 21:33 عصر
براي DataReport مورد نظر نيازي به ايجاد Command در DataEnvironment نيست.
و به همين خاطر نبايد به خاصيت DataSource مربوط به DataReport مقدار بديد.
اينكارو بايد تو زمان كدنويسي انجام بدين. يعني همون دستور بالارو كه يك نوع جستجو هست در DataSource مربوط به ابزار اتصال به بانك قرار بديد و بعد هم Datareport.DataSorce رو Set كنيد به ابزار اتصال به بانك. و در آخر هم report رو نمايش بديد.
نكته مهم اينكه خاصيت DataField مربوط به TextBox هاي گزارش رو بايد به نام فيلد موردنظر بانك تغيير بديد. چون DataSource گزارش مقداري نداره پس نام فيلدها توي DataField ظاهر نميشه، بايد نام فيلد رو تاپيك كنيد.
موفق باشيد/

yshahab
پنج شنبه 10 اردیبهشت 1388, 21:45 عصر
يعني همين كد را بنويسم كافيه يا اينكه بايد كد ديگه اي هم اضافه كنم ، ميشه يه مقدار ساده تر راهنمائيم كنين ! ممنون مي شم دوست پر تلاش من:تشویق:

xxxxx_xxxxx
پنج شنبه 10 اردیبهشت 1388, 22:17 عصر
برنامه ضميمه رو نگاه كنيد.

توضيح:
دو تا جدول داريم، تو هركدوم يك فيلد داريم. جدول اولي فيلد Name داره و جدول دومي فيلد Family داره.
شرط ميزاريم اگه مقادير Name و Family در هركدوم از جدول ها يكسان بود تو گزارش نشون بده.
تو صفحه گزارش هم دوتا TextBox هست كه DataField شون يكي Name هست و اون يكي Family
و ديگر هيچ:چشمک:
موفق باشيد/

yshahab
جمعه 11 اردیبهشت 1388, 01:32 صبح
دوست خوبم من با يه DataGrid امتحان كردم وقتي از يه table استفاده مي كنم مشكلي نيست ولي وقتي از 2 تا table استفاده مي كنم اين ارور مي ده :
The specified field 'Code' could refer to more on table listed in the FROM clause of your SQL statement.
كدهام اينه :



Private Sub Form_Load()
On Error Resume Next

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db.mdb;"
Adodc1.RecordSource = "SELECT X,Y FROM Table1,Table2"
Adodc1.Refresh


End Sub

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 01:52 صبح
به اين خاطر هست كه فيلدهاتون تو جدولهاي مختلف همنام هستند. (فيلد Code)
اينجور مواقع بايد تفاوتي بينشون قائل شد. براي همين بعد از نام فيلد مي نويسيم As newName
و همچنين بايد مشخص كنيم كه هر فيلد متعلق به كدوم جدول هست. براي اين كار قبل از نام فيلد بايد نام جدول رو بنويسيد و يك نقطه بگذاريد و بعد نام فيلد رو بنويسيد.
مثل زير:


"SELECT table1.Code,table2.Code as n2 FROM table1,table2 where table1.Code=table2.Code"

كه اينجا فيلد Code از جدول دوم رو با نام n2 (يه نام دلخواه) صدا ميزنيم.

yshahab
جمعه 11 اردیبهشت 1388, 14:39 عصر
ممنون از كمكتون مشكلم حل شد ولي يه سوال اگه جواب بدين ممنون مي شم حالا من در datagrid اطلاعاتي كه مي خوام دارم چه جوري مي شه كه من روي يكي از رديف هاي datagrid كليك كنم فقط همون رديف در datareport بياد الان به اينجا رسيدم كه كل اطلاعات ذخيره شده را در datareport مي بينم مي خوام روي يه رديف datagrid كليك كنم و فقط همون رديف نمايش داده بشه ممنون از لطفتون با عرض شرمندگي:خجالت:

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 15:26 عصر
فكر نمي كنم بشه با DataGrid به محتواي cell ها دسترسي داشت.
ولي اگر از Vsflex استفاده كنيد ميشه با متد TextMatrix به سلول ها دسترسي داشته باشيد و بعد هم مستقيماً ارسالشون كنيد به صفحه گزارش.

yshahab
جمعه 11 اردیبهشت 1388, 19:00 عصر
پس چجوري ميشه تنها يه رديف از يك table ديتا بيس رو پرينت گرفت ؟!

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 19:22 عصر
همون يك رديف(ركورد) رو select كنيد.
البته من كه نمي دونم شما هدفتون چيه و آيا مي تونيد براي اين كار از يه DataReport ديگه استفاده كنيد يا نه. آيا امكان داره كه بعداً بخواين بجاي يك ركورد، دو يا چند ركورد رو گزارش بگيريد؟

به هر حال شما مي تونيد از Label بجاي TextBox تو صفحه گزارش استفاده كنيد.
و بعد:


DataReport1.Sections("Section2").Controls("Label1").Caption = DataGrid1.Columns.Item(0)
DataReport1.Sections("Section2").Controls("Label2").Caption = DataGrid1.Columns.Item(1)
DataReport1.Sections("Section2").Controls("Label3").Caption = DataGrid1.Columns.Item(2)
' ...
DataReport1.Show
DataSource هم هرچي مي خواين بزارين ولي تو صفحه گزارش textboxي نباشه كه به فيلدهاي جدول وصل باشه.

yshahab
جمعه 11 اردیبهشت 1388, 20:36 عصر
ممنونم ، من بيشتر منظورم با همون datareport ، يه مثال ساده بزنم اينكه ما مشخصات يه سري افراد مثل اسم ، فاميا ، شماره شناسنامه ، نام پدر را در table مشخصات وارد مي كنيم وقتي در datareport گزارش مي گيرم همه مشخصات ذخيره شده نمايش داده ميشه من اينو نميخوام مثلا من فقط مشخصات (علي ) رو مي خوام

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 20:55 عصر
خب اين كه شد همون موضوع اول. مگه نمي گفتيد كه كاربر رو DataGrid كليك كنه و اون ركورد رو تو گزارش بياره؟!!!

براي اين چيزي كه الان مي گيد شما بايد مشخصات فرد موردنظر رو جستجو كنيد. نتيجه رو ست كنيد رو Datareport.DataSource.

ضميمه رو نگاه كنيد:

farkhondehkar
سه شنبه 24 شهریور 1388, 22:58 عصر
خب اين كه شد همون موضوع اول. مگه نمي گفتيد كه كاربر رو DataGrid كليك كنه و اون ركورد رو تو گزارش بياره؟!!!

براي اين چيزي كه الان مي گيد شما بايد مشخصات فرد موردنظر رو جستجو كنيد. نتيجه رو ست كنيد رو Datareport.DataSource.

ضميمه رو نگاه كنيد:

سلام. من این کارو انجام دادم ولی خطای :
failed getting rowset(s) from current data base
داد. این یعنی چی اونوقت؟ ممنون.

xxxxx_xxxxx
چهارشنبه 25 شهریور 1388, 19:59 عصر
سلام. من این کارو انجام دادم ولی خطای :
failed getting rowset(s) from current data base
داد. این یعنی چی اونوقت؟ ممنون.

اگر امکانش هست اون قسمت از برنامه تون رو اینجا قرار بدید.
من تا حالا با این پیغام مواجه نشدم.