ورود

View Full Version : تو کوئری فلیدی بنام ردیف باشه ازشماره یک تا آخر



mohsenna30ri
شنبه 28 مهر 1386, 08:13 صبح
با سلام - یک مشکلی برخورد کردم که کلی کلافه ام کرده
من می خوام تو کوئری یک فیلد بنام ردیف داشته باشم که از شماره یک تا آخر وجود داشته باشه
توجه: از فیلد جدولی به این نام نمی خوام استفاده کنم و فقط از اطلاعات موجود در اون کوئری استفاده بشه! و یک ستون به کوئری اضافه کنه
حدس زدم از توابعی شبیه چندمین رکورد است بتوان استفاده کرد ولی یا این تابع وجود نداره یا من نتونستم پیداش کنم
خیلی خوشحال :قلب::لبخند:و متشکر می شم اگر در این مورد یک مثال برام بگذارید

arshia_
شنبه 28 مهر 1386, 08:28 صبح
یه لیبل برای گزارشت و قسمت ردیف بساز
یه ماکرو تعریف کن که هر وقت فراخوانی شد یکی به مقدار قبلی لیبل مورد نظر اضافه کنه
توی قسمت details گزارش ماکرو رو فراخوانی کن تا به تعداد جزئیات به عدد اضافه کنه و عدد حکم ردیف رو برای گزارش ایفا کنه
برای اینکه در گزارشهای متعدد عدد همیشه از یک شروع بشه بهتره در اولین صفحه گزارش همیشه مقدار رو صفر کنی

شاید روشهای بهینه دیگه ای هم باشه ولی این روش کارت رو راه میندازه

mohsenna30ri
شنبه 28 مهر 1386, 10:38 صبح
arshia_ عزیز دستت درد نکنه
ولی من می خواستم تو کوئری اینکار را انجام دهم چون پس از اتمام کار باید کد اس کیو ال اون رو به جایی دیگه ببرم و بدون استفاده از گزارش و فرم اینکار را بکنم
یک نمونه از برنامه ای که در فرم اینکار رو انجام می ده میگذارم
از دوستان اگر تو کوئری تونستند اینکار رو انجام بدهند متشکر میشم
11669

mohsenna30ri
دوشنبه 30 مهر 1386, 07:05 صبح
اگر تابعی معرفی کنید که بیان کند که این رکورد چندمین رکورده مشکل حل شده است
تابعی به این مضموم سراغ ندارید؟؟ :گریه::گریه::گریه:

mohsenna30ri
چهارشنبه 02 آبان 1386, 13:52 عصر
یک نمونه برنامه دارم که تابع اون تو کوئری جواب نمی ده اما تو فرم عالیه!!:قهقهه::قهقهه:
شاید تو برنامه هاتون فایده داشته باشه!
تابع ( )CurrentRecord


11774

o_panjeshahi
چهارشنبه 02 آبان 1386, 15:25 عصر
یک ستون توی کوئری بساز .فرضا نام کوئری شما استxو فیلد کلیدی شماy
radif:dcount("y";"x";"y<='" & [y] & "'")
تو یک ستون خالی جمله بالا را قرار بده:چشمک::متفکر:

mohsenna30ri
پنج شنبه 03 آبان 1386, 07:48 صبح
یک ستون توی کوئری بساز .فرضا نام کوئری شما استxو فیلد کلیدی شماy
radif:dcount("y";"x";"y<='" & [y] & "'")
تو یک ستون خالی جمله بالا را قرار بده
از ارسال پاسخ شما بسیار متشکرم :متفکر::متفکر: اما ناقص بود
تابع بصورت های زیر رفع خطای اجرایی شد ولی باز هم تو خروجی خطا می زنه

radif: DCount("y","x","y<='" & [y] & "'")

radif2: DCount("[y]","xx","[y]<='" & [y] & "'")

radif3: DCount("y","xx","y<='" & [y] & "'")

برنامه اصلاحی اون رو هم به پیوست می فرستم - از دوستان هر کدام تونستند کوئری برنامه را اشکال زدایی کنند متشکر می شم :گیج::گیج:
11789

mazoolagh
جمعه 04 آبان 1386, 10:38 صبح
بدون استفاده از یوزر فانکشن شدنی نیست - البته اگر از SQL استفاده کنین کد مورد نیاز رو میتونین در SP قرار بدین.

karmand
شنبه 05 آبان 1386, 07:08 صبح
من تست کردم بدون خطا انجام شد جدولی بنام نام شهر با یک فیلد این کواری را اجرا کردم دو ستون ساخت یکی نام شهر دومی ردیف

SELECT nameshahr.CARD_NO, DCount("CARD_NO","NAMESHAHR","CARD_NO<='" & [CARD_NO] & "'") AS RADIF
FROM nameshahr;

mohsenna30ri
شنبه 05 آبان 1386, 07:08 صبح
بدون استفاده از یوزر فانکشن شدنی نیست - البته اگر از SQL استفاده کنین کد مورد نیاز رو میتونین در SP قرار بدین.

کد کوئری رو بصورت SQL می خوام تو دلفی برده و اونجا فراخوانی کنم اگر نمونه بگذارید متشکر می شم:متفکر::متفکر:

mazoolagh
شنبه 05 آبان 1386, 13:11 عصر
من تست کردم بدون خطا انجام شد جدولی بنام نام شهر با یک فیلد این کواری را اجرا کردم دو ستون ساخت یکی نام شهر دومی ردیف

SELECT nameshahr.CARD_NO, DCount("CARD_NO","NAMESHAHR","CARD_NO<='" & [CARD_NO] & "'") AS RADIF
FROM nameshahr;

در این روش اگر شما فیلد کلید نداشته باشین کار نمیکنه و الزاما" همه جداول اینگونه نیستن (یا همه کوئری ها)

mazoolagh
شنبه 05 آبان 1386, 13:18 عصر
کد کوئری رو بصورت SQL می خوام تو دلفی برده و اونجا فراخوانی کنم اگر نمونه بگذارید متشکر می شم:متفکر::متفکر:

شاید درست توضیح ندادم - اگر بانک شما sql (و نه access) باشه میتونین یک sp بنویسین که خواسته تون رو برآورده کنه. ولی اگر بانک access هست مجبورین کد نویسی انجام بدین (حالا Vba یا delphi یا ... بسته به برنامه شما) و یک کوئری access بتنهایی نمیشه با شرایط شما نوشت مگر مثل حالتی که جناب karmand فرمودن.

حالا بفرمایید که کد نمونه منظورتون sql sp هست یا کد vba ؟

mazoolagh
شنبه 05 آبان 1386, 13:23 عصر
در هر صورت بخاطر داشته باشین که همه این روشها Overhead دارن و بهتر هست که در موقع نمایش (فرم یا گزارش) شماره ردیف رو بسازین

mohsenna30ri
یک شنبه 06 آبان 1386, 12:42 عصر
آیا می توان از یک جدول دیگر که حاوی شماره ردیفها از یک تا آخر است استفاده کرده و در کوئری با جدول مورد نظرمان Join کنیم و ستون ردیف را ایجاد کنیم؟؟
اگر بتوان کد VB برای اون نوشت هم مشکل حله!
خودم هم خیلی راغب شدم تا تو برنامه های اکسسم از این ریف استفاده کنم اما انگار این به یک معما تبدیل شده! :گیج::گیج:

mazoolagh
یک شنبه 06 آبان 1386, 20:34 عصر
اگر کد vba مورد نظرتون هست میتونم یک نمونه یوزر فانکشن ، که کوئری شما رو میگیره و یک رکوردست اسنپشات برمیگردونه که شماره ردیف به اون کوئری اضافه شده ، براتون بنویسم.

mohsenna30ri
سه شنبه 08 آبان 1386, 10:08 صبح
اگر کد vba ساده (که زیاد وقتتون رو نگیره) بگذارید متشکر میشم

mazoolagh
سه شنبه 08 آبان 1386, 21:24 عصر
این فانکشن ممکنه مشکل شما را کامل حل نکنه ولی شاید بتونه بهتون ایده بده :


Public Function Add_ItemNo(QRY As String) As Recordset
Dim TD As TableDef
DoCmd.SetWarnings False
For Each TD In CurrentDb.TableDefs
If TD.Name = "TempTable" Then
DoCmd.RunSQL ("DROP TABLE TempTable")
Exit For
End If
Next
DoCmd.RunSQL (Replace(QRY, " FROM ", " INTO TempTable FROM "))
DoCmd.RunSQL ("ALTER TABLE TempTable ADD COLUMN _ItemNo_ COUNTER")
DoCmd.SetWarnings True
Set Add_ItemNo = CurrentDb.OpenRecordset("SELECT * FROM TempTable", dbOpenSnapshot)
End Function


این فانکشن کوئری شما QRY رو میخونه و خودش یک فیلد بنام ItemNo_ بهش اضافه میکنه و یک رکوردست بر اساس کوئری جدید برمیگردونه.
بالطبع هر تغییری که در رکوردست بدین تاثیری در اصل اطلاعات شما نداره.


حالا کافی هست در رخدادی مثل ONOPEN رکوردست فرم یا گزارش رو بصورت زیر براش معین کنین:


Set Me.Recordset = Add_ItemNo("SELECT ProductName, Discontinued, UnitPrice FROM Products")

mohsenna30ri
شنبه 12 آبان 1386, 08:03 صبح
من نتونستم تو برنامه ام استفاده کنم فکر کنم یک جایی از برنامه دچار اشتباه می شم
میشه یک مثال بگذارید - مرسی

mazoolagh
شنبه 12 آبان 1386, 21:53 عصر
بله ، حتما"

mohsenna30ri
یک شنبه 13 آبان 1386, 07:39 صبح
mazoolagh جان سلام

فرمت فایل ارسالی شما چیست؟
فکر کنم اکسس نباشه - فایلی بنام زیر
Northwind1.accdb

مهدی قربانی
یک شنبه 13 آبان 1386, 08:58 صبح
mazoolagh جان سلام

فرمت فایل ارسالی شما چیست؟
فکر کنم اکسس نباشه - فایلی بنام زیر
Northwind1.accdb
سلام
فایل مورد نظر اکسس منتها ورژن 2007

mohsenna30ri
یک شنبه 13 آبان 1386, 12:41 عصر
آفیس 2007 ندارم
میشه تبدیل 2003 اون رو به بگذارید

مهدی قربانی
یک شنبه 13 آبان 1386, 22:58 عصر
سلام
آقا محسن اینم فایل با ورژن 2003-2002