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 باشه.
یا حق
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.