ورود

View Full Version : حرفه ای: چطور اطلاعات چند رکورد را توی یک سطر داشته باشیم



Younestalebi
سه شنبه 18 مرداد 1390, 05:39 صبح
سلام دوستان
من یه فرم دارم که می خوام اطلاعات یکی از جدولهام رو توی اون بصورت یک سطر و در کنار هم داشته باشم
ممنون میشم اگه کسی بتونه کمک کنه

wolfstander
سه شنبه 18 مرداد 1390, 10:05 صبح
سلام
من از این فرمت استفاده میکنم
فرض کنیم شما دو فیلد نام و نام خانوادگی داشته باشید
name
family
بعدش میخواید این دو تا رو به هم متصل کنید
در فیلد familyname میخواید این دو تا نمایش داده بشه
یک کوئری آپدیت ایجاد میکنید
و در بخش update To این اطلاعات رو وارد میکنید

Family & " " & Name
بین دو تا کوتیشن یک فاصله است که نام و نام خانوادگی به هم نچسبند
برای چسبوندن رشته های متنی به هم، از عملگر & استفاده میشه
البته اگه من منظور شما رو درست فهمیده باشم که میخواید این کار رو کنید
اگه هم بخواید تو فرمتون این کار رو کنید که یک تکست باکس unbound بندازید توی فرم
و مقدار اون رو در Control Source برابر کد بالا قرار بدید

Younestalebi
سه شنبه 18 مرداد 1390, 12:46 عصر
نه دوست عزيز من مي خوام اطلاعات چند ركورد به جاي اينكه زير هم باشند كنار هم قرار بگيرند

faravaghi
سه شنبه 18 مرداد 1390, 13:04 عصر
سلام عزیز،
من یک جدول دارم که مثلا برای مشتری است و یک جدول برای نگهداری شماره تلفن های آن مشتری(یک یا چندتا شماره تلفن که ممکن است هر شماره یک نام جدا داشته باشه) تو جدول شماره تلفن یک فیلد دارم که مشخص میکنه کدام شماره ها متعلق به کدوم مشتری است.
یه تابع نوشتم که میاد از یک جدول شماره تلفن، نام صاحب تلفن و تلفنش را در میاره و داخل یک متغیر قرار میده، بعد برای اینکه اینو بیارم تو SELECT میام نام تابع رو می نویسم.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[PhoneNumber]
(
@OrderIndex int
)
RETURNS

VARCHAR(1000)

AS
BEGIN
Declare @PhoneList varchar(1000)

SET @PhoneList = ''
select @PhoneList = @PhoneList + ' ' + owner + ' :' + phone from dbo.phone where orderid = @OrderIndex

-- select 'Results = ' + @PhoneList

RETURN @PhoneList
END


متغیر @OrderIndex int پارامتر ورودی است و (RETURNS VARCHAR(1000 برای خروجی تابع است. اینم برای استفاده از تابع:


SELECT dbo.orders.id, dbo.PhoneNumber(dbo.orders.id) AS Phone FROM Table_Name

Younestalebi
پنج شنبه 20 مرداد 1390, 18:18 عصر
سلام دوستان
کسی نمی تونه راهنمایی کنه
من می خوام رکوردها در فرم بجای آنکه زیر هم نمایش داده شوند در کنار هم نمایش داده شوند.

faravaghi
جمعه 21 مرداد 1390, 01:56 صبح
سلام دوست عزیز، شرمنده من فکر کردم شما با SQL Server کار می کنی!
اینو یه امتحان بکن:
این یک نمونه تابع است که تغریبا همین که می خوای رو انجام میده، بقیه اش با خودت:


Function Coalsce(strSQL As String, strDelim, ParamArray NameList() As Variant)
Dim db As Database
Dim rs As DAO.Recordset
Dim strList As String

Set db = CurrentDb

If strSQL <> "" Then
Set rs = db.OpenRecordset(strSQL)

Do While Not rs.EOF
strList = strList & strDelim & rs.Fields(0)
rs.MoveNext
Loop

strList = Mid(strList, Len(strDelim))
Else

strList = Join(NameList, strDelim)
End If

Coalsce = strList

End Function


یا این تابع :

Public Function Coalesce(pstrTableName As String, pstrFieldName As String)

Dim rst As DAO.Recordset
Dim str As String

Set rst = CurrentDb.OpenRecordset(pstrTableName)
Do While rst.EOF = False
If Len(str) = 0 Then
str = rst(pstrFieldName)
Else
str = str & "," & rst(pstrFieldName)
End If
rst.MoveNext
Loop

Coalesce = str

End Function



نحوه استفاده :

SELECT documents.MembersOnly,
Coalsce("SELECT FName From Persons WHERE Member=True",":") AS Who,
Coalsce("",":","Mary","Joe","Pat?") AS Others
FROM documents;

Younestalebi
جمعه 21 مرداد 1390, 03:38 صبح
چطور باید از این تابع استفاده کرد ؟

faravaghi
جمعه 21 مرداد 1390, 13:26 عصر
سلام،
تو Access یک ماژول ایجاد کن بعد تو اون این تابع رو بنویس. هر جا خواستی SELECT بگیری اسم تابع رو بیار با پارامتر های ورودی.

73698
73701
73699
73700
فقط این رو هم بگم شما از این یاد بگیر بعد بیا برای خودت یه چیزی درست کن که می خوای. یعنی این یک Sample باشه.
یا حق