PDA

View Full Version : یکجا کردن مقادیر مختلف یک ستون در یک فیلد



hariva
سه شنبه 08 اسفند 1385, 00:04 صبح
یک سوال درباره بانک اکسس دارم که بهتر است با مثال بگم

فرض کنید

یک جدول داریم که شامل دو ستون نام و نام خانوادگی است.در این لیست نام تعداد زیادی آدم هم ثبت شده است که میتواند در اسم و فامیل و یا هردو با هم برابر باشند.

ما میخواهیم بوسیله ی این جدول جدول دیگری بسازیم که باز هم دو ستون دارد. با این تفاوت که
1- ستون اول شامل تمام نام های فامیلی جدول اول بدون تکرار باشد
2-در ستون دوم در مقابل هر نام فامیل کلیه اسم هایی که طبق جدول اول دارای آن فامیلی هستند بدون تکرار و با یک علامت جداساز (مثلا " یا - ) قرار داشته باشد.

این کار را آیا با کُوِری میشه انجام داد یا باید کد نویسی :اشتباه: کرد.

سپاسگذار خواهم بود اگر دوستی پاسخ گوید ویا کمک کند

seeker
سه شنبه 08 اسفند 1385, 10:10 صبح
این قسمت رو متوجه شدم:



یک جدول داریم که شامل دو ستون نام و نام خانوادگی است.در این لیست نام تعداد زیادی آدم هم ثبت شده است که میتواند در اسم و فامیل و یا هردو با هم برابر باشند.


ما میخواهیم بوسیله ی این جدول جدول دیگری بسازیم که باز هم دو ستون دارد. با این تفاوت که
1- ستون اول شامل تمام نام های فامیلی جدول اول بدون تکرار باشد


ولی این قسمت رو نه:




2-در ستون دوم در مقابل هر نام فامیل کلیه اسم هایی که طبق جدول اول دارای آن فامیلی هستند بدون تکرار و با یک علامت جداساز (مثلا " یا - ) قرار داشته باشد.

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

MM_Mofidi
سه شنبه 08 اسفند 1385, 13:19 عصر
فر کنم راه حل بهتر هم داشته باشه ولی با در نظر گرفتن 2 تا رکوردست تو در تو و پیمایش آنها برای ساخت رشته مشکلت حل بشه.
رشته بیرونی

SELECT Contacts.LastName FROM Contacts GROUP BY Contacts.LastName
رشته درونی

SELECT Contacts.FirstName FROM Contacts GROUP BY Contacts.FirstName, Contacts.LastName HAVING (((Contacts.LastName)=@para))
که در اینجا بجای @para باید مقدار lastname جاری در رکردست بیرونی قرار گیرد

hariva
چهارشنبه 09 اسفند 1385, 00:05 صبح
با تشکر از MM_Mofidi
(http://www.barnamenevis.org/forum/member.php?u=5582)
باید کد های ایشان را امتحان کنم (راستش زیاد از VBA و SQL سر در نمی آورم)

جهت رفع ابهام

من میخواهم این جدول

"فرامرز" "تمنا"
"علیرضا" "ابراهیمی"
"بهنام" "جواد شعار"
"متین" "تمنا"
"پرویز" "تمنا"
"جلال" "ابراهیمی"
"بهنام" "جواد شعار"

به جدول زیر تبدیل شود

"تمنا" "فرامرز/متین/پرویز"
"ابراهیمی" "علیرضا/جلال"
"بهنام" "جواد شعار"

hariva
چهارشنبه 09 اسفند 1385, 12:14 عصر
من به کمک کد های دوستمان این برنامه را در ویبی دات نت نوشتم و کار میکند.اما تنها مشکلی که دارد این است که اگر فیلدی دارای علامت " ' " باشد در کار برنامه خلل وارد میکند.





Dim i As Integer
Dim j As Integer
Dim nms as string


'OpenDbCon()
CNN.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source='D://db1.mdb'"
CNN.Open()


DA1 = New OleDb.OleDbDataAdapter(SELECT Contacts.LastName FROM Contacts GROUP BY Contacts.LastName, CNN)
DA1.Fill(DS)


dt = DS.Tables(0)
dt.Columns.Add("names")

For i = 0 To dt.Rows.Count - 1
dr = dt.Rows(i)

DA2 = New OleDb.OleDbDataAdapter("SELECT Contacts.FirstName FROM Contacts GROUP BY Contacts.FirstName, Contacts.LastName HAVING (((Contacts.LastName)='" & dr.Item(0) & "'))", CNN)
DA2.Fill(DS2)

For j = 1 To DS2.Tables(0).Rows.Count
nms = nms & "/" & DS2.Tables(0).Rows(j - 1).Item(0)
Next

nms = Mid(nms, 2)

dr.Item(1) = nms

DS2.Tables(0).Clear()
nms = ""

Next


DataGrid1.DataSource = DS

MM_Mofidi
چهارشنبه 09 اسفند 1385, 13:56 عصر
خوب مشکلی ندارد که خط قبل از DA2 = New OleDb یک خط اضافه کن و در آن مقدار dr.Item(0) را در یک متغیر بریز و کاراکترهای بیربط یا مشکل ساز را با نمونه بی خطر جایگزین یا حذف کن ;-)

adhami
چهارشنبه 09 اسفند 1385, 14:01 عصر
با سلام
من هم چنین مشکلی دارم ؟
ولی در vb کدنویسی کردم ، کدنویسی من تقریبا شبیه کدنویسی شما در دات نت است ولی هنگام اتصال به بانک و کار روی آرایه برای من خطا می گیرد ؟
به جز این راه حل راه دیگه ای وجود نداره ؟
مثلا اگه از کدنویسی در بانک استفاده کنیم در view ها ؟

MM_Mofidi
چهارشنبه 09 اسفند 1385, 15:25 عصر
فکر کنم از کرسر بتونی استفاده کنی شایدم با فراخوانی تو در تو نمیدونم باید روش فکر کنی.
ولی در vb هم به راحتی از همین روش میشه استفاده کرد در حال حرکت روی رکوردست بیرونی تمام رکوردهای رکوردست داخلی را پیمایش کن.

adhami
چهارشنبه 09 اسفند 1385, 17:31 عصر
در حال حرکت روی رکوردست بیرونی تمام رکوردهای رکوردست داخلی را پیمایش کن.

میشه یک مثال بذارین
ممنون

hariva
چهارشنبه 09 اسفند 1385, 20:55 عصر
کاراکتر مشکل ساز خود " ' " است.وقتی کلمه ای دارای این کاراکتر باشد چون در آن کد sql از همین علامت برای نشان دادن ابتدا و انتهای مقدار استفاده شده مابقی متن بعد از ' یک چیز اضافه و ارور سازی است. همانطور که میدانید این مشکل به مقوله ی جستجو بوسیله ی sql ربط دارد و کلی است. من این کار را بدون قرار دادن این علامت در ابتدا و انتهای عبارت انجام دادم نتیجه ای جز ارور نداشت.

:متفکر:

MM_Mofidi
یک شنبه 13 اسفند 1385, 12:49 عصر
خوب مشکلی ندارد که خط قبل از DA2 = New OleDb یک خط اضافه کن و در آن مقدار dr.Item(0) را در یک متغیر بریز و کاراکترهای بیربط یا مشکل ساز را با نمونه بی خطر جایگزین یا حذف کن ;-)

دیدی خوب دقت نکردی ' را با '' جابجا کن (یه دونه با دوتا)