صفحه 2 از 4 اولاول 1234 آخرآخر
نمایش نتایج 41 تا 80 از 142

نام تاپیک: خارج از دستور - پرسشهایی از جنس دیگر

  1. #41
    کاربر دائمی آواتار padide55
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    زاهدان
    پست
    567

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    سلام
    موقتا کمک میخوام

    اول اینکه میخوام 360 عدد دایره درست کنم که به ترتیب چینش کنم
    یعنی باتن شماره 1 تا 360
    یعنی
    for x to command360
    me.commandX.move x ,3000
    next
    حالا محاسبه x رو با
    dim ctl as control بدست بیاریم و چینش بشه یعنی 365 نقطه به فاصله 1 پیکسل از هم در ارتفاع 3000 ردیف شوند .
    . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    -----------------------------
    بعد از کمک شما
    میخوام کد بدم که سمت چپ دایره قرمز با چپ هر باتن اندازه بود .
    اون باتن بره به ارتفاع باتن زرد در راستای خط متحرک .که اینجوری بشه



    وقتی جابجا شد .
    دوباره دونه دونه پیکسل بیاد پایین تا ارتفاع 30000 مثلا.
    چیزی شبیه فواره . هر شکل بره بالا و روشن بشه و بعد دونه دونه بیاد پایین و به پایین که رسید خاموش بشه .

    فعلا مرحله اول رو کمک میخوام
    اندازه رو محاسبه میکنم بعدا
    فایل های ضمیمه فایل های ضمیمه

  2. #42
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط padide55 مشاهده تاپیک
    سلام
    ...
    سلام و روز خوش
    1- در مورد ساعت و بطور کلی انیمیشن روی فرم اکسس، متاسفانه همه روشهای متعارف نتیجه اش زمخت و چشم آزار از آب در میاد و این نه بخاطر ضعف کدنویس بلکه محدودیت ذاتی اکسس هست.
    این ساعت که نمونه گذاشتم خارج از اکسس طراحی و اجرا میشه - فقط نتیجه روی فرم اکسس دیده میشه و حرکت هم بسیار روان هست.
    کدنویسی هم بسیار راحتتر ولی البته vba نیست!

    2- برای گراف و نمودار، مشکلات ردیف 1 رو نداریم، ولی محاسبات نمایش با vba و امکانات داخلی سختتر و از نظر ظاهری هم منحنی ها و خطوط هموار نیستن، ولی قابل قبول هست و شدنیه.
    این گراف نمونه هم البته با vba نیست و همونطور که میبینین منحنی ها کاملا هموار هستن.
    دقت کنید که در فرم اکسس نمیتونین point یا دایره رسم کنین، برای اینکار از ریپورت استفاده کنین.

    3- در مورد ساخت 360 کنترل روی فرم، باید فرم رو با کد در مود طراحی باز کنین و با متد createcontrol هر چه که لازم دارین بسازین و به فرم اضافه و بعد فرم رو ذخیره کنین.

  3. #43
    کاربر دائمی آواتار padide55
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    زاهدان
    پست
    567

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    سلام
    نمونه دایره و حرکت را با نمودار اکسس در یک فرم ایجاد کردم .

    نتیجه
    بجای جدول دستی هم میشه خود سیستم بصورت اتومات سینوس مورد نظر را ایجاد و درجدول قراربده . البته اینجا فقط برای نمودار از جدول استفاده میشه . برای ایجاد حرکت هم سینوس 90 درجه کمتر و 90 درجه بیشتر از عدد مورد نظر رو وارد کردم که نمودار مقدار زاویه که در خط افقی میاد رو داشته باشه .
    نمودارهای مورد نظر در تصویر هم به همون شکل ساخته میشه . فقط باید فرمول XY رو محاسبه نمود و آرایه Y , X رو در آورد . که اون هم با توجه به فرمول هر نمودار شدنیه .
    ولی درکل روش نمودار همینه که اینجا اوردم . فقط نوع محاسبه داده ها فرق میکنه .
    نمودار پویا در اکسس
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله padide55 : پنج شنبه 04 دی 1399 در 11:01 صبح

  4. #44
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط padide55 مشاهده تاپیک
    سلام
    نمونه دایره و حرکت را با نمودار اکسس در یک فرم ایجاد کردم .

    نتیجه
    بجای جدول دستی هم میشه خود سیستم بصورت اتومات سینوس مورد نظر را ایجاد و درجدول قراربده . البته اینجا فقط برای نمودار از جدول استفاده میشه . برای ایجاد حرکت هم سینوس 90 درجه کمتر و 90 درجه بیشتر از عدد مورد نظر رو وارد کردم که نمودار مقدار زاویه که در خط افقی میاد رو داشته باشه .
    نمودارهای مورد نظر در تصویر هم به همون شکل ساخته میشه . فقط باید فرمول XY رو محاسبه نمود و آرایه Y , X رو در آورد . که اون هم با توجه به فرمول هر نمودار شدنیه .
    ولی درکل روش نمودار همینه که اینجا اوردم . فقط نوع محاسبه داده ها فرق میکنه .
    نمودار پویا در اکسس

    بابا ! تو دیگه کی هستی ؟!

  5. #45
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    ...............................

  6. #46
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    ....................................
    آخرین ویرایش به وسیله eb_1345 : پنج شنبه 04 دی 1399 در 22:45 عصر

  7. #47
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    ....................................
    نمیدونم چرا پست رو پاک کردین
    ولی در ایمیل مشخص بود که به اکتیواکس codejoke اشاره کرده بودین.
    با codejoke آشنایی ندارم، ولی به اصل مطلب این پرسش که برای هر کاری باید از ابزار صحیح اون استفاده کرد رسیدین و اینجا هم در کل مجبوریم از اکتیوایکس (ولی مناسب) استفاده کنیم.

  8. #48
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    در مورد ساعت:
    اگر هدف نمایش وقت هست که خود taskbar ساعت داره و نیازی نیست و کار بیهوده ای هست،
    اگر هدف زیبایی فرم و ... هست که باز هم کار عبثی است!
    اما اگر هدف چالش کدنویسی و محک زدن توانایی و ... است نتیجه اش همین هست که کار بیهوده ایست و بهتره وقتمون رو روی موارد مهمتر بگذاریم.

    به هر حال چند راه وجود داره:
    1- ساعت flash - که بهتره از اون اجتناب بشه، ولی ده ها طرح دیجیتال و آنالوگ ازش به راحتی در دسترس هست.
    2- استفاده از فونت مناسب (بهترین روش)
    3- استفاده از html5 در کنترل web browser
    اون ساعت که نمونه اش رو فرستاده بودم در اصل یک فایل html بود که همینجا پیوست میکنم



    <!DOCTYPE HTML>
    <html>
    <head>
    <title>clock</title>
    <style>
    body {
    background-color:#3084e2;
    }
    #cnv {
    position:absolute;
    top:50%;
    left:50%;
    width:500px;
    height:500px;
    margin:-250px 0 0 -250px;
    }
    </style>
    </head>


    <body onload="clock();">


    <canvas id="cnv"></canvas>


    <script>
    function clock() {
    var canvas = document.getElementById('cnv');

    //guarantee canvas is supported
    if (!canvas.getContext) {
    alert('canvas not supported!');
    return;
    }

    canvas.width = 500;
    canvas.height = 500;
    tick();
    }


    function tick() {
    var d = new Date();
    var h = d.getHours();
    var m = d.getMinutes() + h * 60;
    var s = d.getSeconds() + m * 60;
    var ms = d.getMilliseconds();

    //multiply by 6 to get basic sec angle, then add up to
    //5.994 degrees (999 * 0.006) to account for milliseconds
    var secAngle = -90 + s * 6 + ms * 0.006;

    //multiply by 6 to get basic min angle, then add up to
    //5.9 degrees (59 * 0.1) to account for seconds
    var minAngle = -90 + s * 0.1;

    //multiply by 30 to get basic hour angle, then add up to
    //29.5 degrees (59 * 0.5) to account for minutes, and up to
    //0.4916666667 degrees (59 * 1/120) to account for seconds
    var hourAngle = -90 + (s / 120);

    var canvas = document.getElementById('cnv');
    var ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, 500, 500);

    drawFace(ctx);

    ctx.translate(250, 250);
    drawTicks(ctx);
    drawHourHand(ctx, hourAngle);
    drawMinHand(ctx, minAngle);
    drawSecHand(ctx, secAngle);
    ctx.translate(-250, -250);
    drawFace2(ctx);

    setTimeout(tick, 31);
    }


    function drawFace(ctx) {
    //outer black ring
    ctx.beginPath();
    ctx.arc(250, 250, 250, 0, 2 * Math.PI);
    ctx.fillStyle = '#111';
    ctx.fill();
    ctx.closePath();

    //next light grey ring
    ctx.beginPath();
    ctx.arc(250, 250, 248, 0, 2 * Math.PI);
    ctx.fillStyle = '#bbb';
    ctx.fill();
    ctx.closePath();


    //outer gradient bezel
    var g1x1 = 250 + 246 * Math.cos(4/3*Math.PI);
    var g1y1 = 250 + 246 * Math.sin(4/3*Math.PI)
    var g1x2 = 250 + 246 * Math.cos(1/3*Math.PI);
    var g1y2 = 250 + 246 * Math.sin(1/3*Math.PI);
    var g1 = ctx.createLinearGradient(g1x1,g1y1,g1x2,g1y2);
    g1.addColorStop(0, '#f4f4f4');
    g1.addColorStop(1, '#000');

    ctx.beginPath();
    ctx.arc(250, 250, 246, 0, 2 * Math.PI);
    ctx.fillStyle = g1;
    ctx.fill();
    ctx.closePath();


    //next outer bezel
    var g2x1 = 250 + 224 * Math.cos(4/3*Math.PI);
    var g2y1 = 250 + 224 * Math.sin(4/3*Math.PI)
    var g2x2 = 250 + 224 * Math.cos(1/3*Math.PI);
    var g2y2 = 250 + 224 * Math.sin(1/3*Math.PI);
    var g2 = ctx.createLinearGradient(g2x1,g2y1,g2x2,g2y2);
    g2.addColorStop(0, '#000');
    g2.addColorStop(1, '#777');

    ctx.beginPath();
    ctx.arc(250, 250, 224, 0, 2 * Math.PI);
    ctx.fillStyle = g2;
    ctx.fill();
    ctx.closePath();


    //tan clock face
    ctx.beginPath();
    ctx.arc(250, 250, 212, 0, 2 * Math.PI);
    ctx.fillStyle = '#d5c595';
    ctx.fill();
    ctx.closePath();
    }


    function drawTicks(ctx) {
    //radial lines
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 0);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 30);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 60);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 90);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 120);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 150);


    //triangle ticks
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 0);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 90);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 180);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', -90);

    //long brown ticks
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 30);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 60);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 120);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 150);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -30);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -60);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -120);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -150);

    //text labels: 3,6,9,12
    ctx.font = '24pt Georgia';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillStyle = '#444';
    ctx.fillText('3', 140, -4);
    ctx.fillText('6', 0, 138);
    ctx.fillText('9', -140, -4);
    ctx.fillText('12', 0, -140);

    //big dot above 12
    ctx.beginPath();
    ctx.arc(0, -195, 4, 0, 2 * Math.PI);
    ctx.fillStyle = '#444';
    ctx.fill();
    ctx.closePath();

    for (var i = 0; i < 360; i += 30) {
    //outer tick squares
    drawPath(ctx, 'M 180,-3 L 184,-3 184,3 180,3 Z', 'rgba(68,68,68,0.8)', i);

    //inner tick squares
    drawPath(ctx, 'M 110,-3 L 120,-3 120,3 110,3 Z', 'rgba(68,68,68,0.8)', i);


    //outer text labels
    var lbl = '' + Math.round(i/6 + 15);
    if (lbl == '60') lbl = '';
    if (lbl == '65') lbl = '5';
    if (lbl == '70') lbl = '10';
    var x = 195 * Math.cos(i * Math.PI / 180.0);
    var y = 195 * Math.sin(i * Math.PI / 180.0);
    ctx.save();
    ctx.translate(x,y);
    ctx.rotate((i + 90 - (i > 0 && i < 180 ? 180 : 0)) * Math.PI / 180.0);
    ctx.font = '9pt Georgia';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillStyle = 'rgba(68,68,68,0.8)';
    ctx.fillText(lbl, 0, 0);
    ctx.restore();

    //far outer dots between labels
    ctx.beginPath();
    x = 195 * Math.cos((i+15) * Math.PI / 180);
    y = 195 * Math.sin((i+15) * Math.PI / 180);
    ctx.arc(x, y, 1.5, 0, 2 * Math.PI);
    ctx.fillStyle = '#444';
    ctx.fill();
    ctx.closePath();

    for (var j = 0; j < 25; j += 6) {
    if (j != 0) {
    //outer tick ring - long ticks
    drawPath(ctx, 'M 174,-0.5 L 184,-0.5 184,0.5 174,0.5 Z', '#444', i+j);

    //inner tick ring - short ticks
    drawPath(ctx, 'M 114,-0.5 L 120,-0.5 120,0.5 114,0.5 Z', 'rgba(68,68,68,0.8)', i+j);
    }

    for (var k = 1.5; k < 5; k += 1.5) {
    //outer tick ring - short ticks
    drawPath(ctx, 'M 180,-0.3 L 184,-0.3 184,0.3 180,0.3 Z', 'rgba(68,68,68,0.5)', i+j+k);
    }
    }
    }
    }


    function drawSecHand(ctx,ang) {
    drawPath(ctx, 'M -50,0 L -45,-5 -25,-5 -22,-2 22,-2 25,-5 180,0 25,5 22,2 -22,2 -25,5 -45,5 Z', '#c21', ang);


    ctx.beginPath();
    ctx.arc(0, 0, 8, 0, 2 * Math.PI);
    ctx.fillStyle = '#c21';
    ctx.fill();
    ctx.closePath();
    }


    function drawMinHand(ctx,ang) {
    drawPath(ctx, 'M 0,0 L 1,-2 20,-2 22,-5 122,-5 124,-2 146,-2 168,0 146,2 124,2 122,5 22,5 20,2 1,2 0,0 24,0 24,2 120,2 122,0 120,-2 24,-2 24,0 Z', '#111', ang);
    }


    function drawHourHand(ctx,ang) {
    drawPath(ctx, 'M 0,0 L 1,-3 14,-3 17,-7 97,-7 100,-3 112,-2 134,0 112,2 100,3 97,7 17,7 14,3 1,3 0,0 18,0 21,3 94,3 96,0 94,-3 21,-3 18,0 Z', '#000', ang);
    }


    function drawFace2(ctx) {
    //outer center button ring
    var g1x1 = 250 + 5 * Math.cos(4/3*Math.PI);
    var g1y1 = 250 + 5 * Math.sin(4/3*Math.PI)
    var g1x2 = 250 + 5 * Math.cos(1/3*Math.PI);
    var g1y2 = 250 + 5 * Math.sin(1/3*Math.PI);
    var g1 = ctx.createLinearGradient(g1x1,g1y1,g1x2,g1y2);
    g1.addColorStop(0, '#999');
    g1.addColorStop(1, '#333');

    ctx.beginPath();
    ctx.arc(250, 250, 5, 0, 2 * Math.PI);
    ctx.fillStyle = g1;
    ctx.fill();
    ctx.closePath();

    //inner center button
    var g2x1 = 250 + 3 * Math.cos(4/3*Math.PI);
    var g2y1 = 250 + 3 * Math.sin(4/3*Math.PI)
    var g2x2 = 250 + 3 * Math.cos(1/3*Math.PI);
    var g2y2 = 250 + 3 * Math.sin(1/3*Math.PI);
    var g2 = ctx.createLinearGradient(g2x1,g2y1,g2x2,g2y2);
    g2.addColorStop(0, '#ccc');
    g2.addColorStop(1, '#aaa');

    ctx.beginPath();
    ctx.arc(250, 250, 3, 0, 2 * Math.PI);
    ctx.fillStyle = g2;
    ctx.fill();
    ctx.closePath();

    //highlight (gradient overlay)
    var g3x1 = 250 + 212 * Math.cos(4/3*Math.PI);
    var g3y1 = 250 + 212 * Math.sin(4/3*Math.PI)
    var g3x2 = 250 + 212 * Math.cos(1/3*Math.PI);
    var g3y2 = 250 + 212 * Math.sin(1/3*Math.PI);
    var g3 = ctx.createLinearGradient(g3x1,g3y1,g3x2,g3y2);
    g3.addColorStop(0, 'rgba(255,255,255,0.5)');
    g3.addColorStop(1, 'rgba(255,255,255,0)');

    ctx.beginPath();
    ctx.arc(250, 250, 212, 0, 2 * Math.PI);
    ctx.fillStyle = g3;
    ctx.fill();
    ctx.closePath();
    }


    /** Simple svg path parser that only understands M (move to) and L (line to). */
    function drawPath(ctx,path,fill,ang) {
    ctx.save();
    ctx.rotate(ang == undefined ? 0 : ang * Math.PI / 180.0);
    ctx.beginPath();

    var parts = path.split(' ');
    while (parts.length > 0) {
    var part = parts.shift();
    if (part == 'M') {
    coords = parts.shift().split(',');
    ctx.moveTo(coords[0], coords[1]);
    } else if (part == 'L') {
    continue;
    } else if (part == 'Z') {
    break;
    } else if (part.indexOf(',') >= 0) {
    coords = part.split(',');
    ctx.lineTo(coords[0], coords[1]);
    }
    }

    ctx.closePath();
    ctx.fillStyle = (fill == undefined ? '#000' : fill);
    ctx.fill();
    ctx.restore();
    }
    </script>
    </body>
    </html>


    فایل های ضمیمه فایل های ضمیمه

  9. #49
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    در مورد نمودار:
    نمودار همانجور که قبلا گفتیم در خود اکسس قابل ساخت هست (با کدنویسی زیاد) ولی نتیجه جالبی بدست نمیاد.
    یک راه مناسب استفاده از visio هست و کافی هست یک visio viewer در فرم اضافه بشه.
    البته Html5 هم همیشه هست!

    <!DOCTYPE HTML><html>
    <head>
    <style>
    body {
    margin: 0px;
    padding: 0px;
    }


    </style>
    </head>
    <body data-rsssl=1>
    <canvas id="myCanvas" width="800" height="500"></canvas>
    <script>
    function Graph(config) {
    // user defined properties
    this.canvas = document.getElementById(config.canvasId);
    this.minX = config.minX;
    this.minY = config.minY;
    this.maxX = config.maxX;
    this.maxY = config.maxY;
    this.unitsPerTick = config.unitsPerTick;


    // constants
    this.axisColor = '#aaa';
    this.font = '8pt Calibri';
    this.tickSize = 20;


    // relationships
    this.context = this.canvas.getContext('2d');
    this.rangeX = this.maxX - this.minX;
    this.rangeY = this.maxY - this.minY;
    this.unitX = this.canvas.width / this.rangeX;
    this.unitY = this.canvas.height / this.rangeY;
    this.centerY = Math.round(Math.abs(this.minY / this.rangeY) * this.canvas.height);
    this.centerX = Math.round(Math.abs(this.minX / this.rangeX) * this.canvas.width);
    this.iteration = (this.maxX - this.minX) / 1000;
    this.scaleX = this.canvas.width / this.rangeX;
    this.scaleY = this.canvas.height / this.rangeY;


    // draw x and y axis
    this.drawXAxis();
    this.drawYAxis();
    }


    Graph.prototype.drawXAxis = function() {
    var context = this.context;
    context.save();
    context.beginPath();
    context.moveTo(0, this.centerY);
    context.lineTo(this.canvas.width, this.centerY);
    context.strokeStyle = this.axisColor;
    context.lineWidth = 2;
    context.stroke();


    // draw tick marks
    var xPosIncrement = this.unitsPerTick * this.unitX;
    var xPos, unit;
    context.font = this.font;
    context.textAlign = 'center';
    context.textBaseline = 'top';


    // draw left tick marks
    xPos = this.centerX - xPosIncrement;
    unit = -1 * this.unitsPerTick;
    while(xPos > 0) {
    context.moveTo(xPos, this.centerY - this.tickSize / 2);
    context.lineTo(xPos, this.centerY + this.tickSize / 2);
    context.stroke();
    context.fillText(unit, xPos, this.centerY + this.tickSize / 2 + 3);
    unit -= this.unitsPerTick;
    xPos = Math.round(xPos - xPosIncrement);
    }


    // draw right tick marks
    xPos = this.centerX + xPosIncrement;
    unit = this.unitsPerTick;
    while(xPos < this.canvas.width) {
    context.moveTo(xPos, this.centerY - this.tickSize / 2);
    context.lineTo(xPos, this.centerY + this.tickSize / 2);
    context.stroke();
    context.fillText(unit, xPos, this.centerY + this.tickSize / 2 + 3);
    unit += this.unitsPerTick;
    xPos = Math.round(xPos + xPosIncrement);
    }
    context.restore();
    };


    Graph.prototype.drawYAxis = function() {
    var context = this.context;
    context.save();
    context.beginPath();
    context.moveTo(this.centerX, 0);
    context.lineTo(this.centerX, this.canvas.height);
    context.strokeStyle = this.axisColor;
    context.lineWidth = 2;
    context.stroke();


    // draw tick marks
    var yPosIncrement = this.unitsPerTick * this.unitY;
    var yPos, unit;
    context.font = this.font;
    context.textAlign = 'right';
    context.textBaseline = 'middle';


    // draw top tick marks
    yPos = this.centerY - yPosIncrement;
    unit = this.unitsPerTick;
    while(yPos > 0) {
    context.moveTo(this.centerX - this.tickSize / 2, yPos);
    context.lineTo(this.centerX + this.tickSize / 2, yPos);
    context.stroke();
    context.fillText(unit, this.centerX - this.tickSize / 2 - 3, yPos);
    unit += this.unitsPerTick;
    yPos = Math.round(yPos - yPosIncrement);
    }


    // draw bottom tick marks
    yPos = this.centerY + yPosIncrement;
    unit = -1 * this.unitsPerTick;
    while(yPos < this.canvas.height) {
    context.moveTo(this.centerX - this.tickSize / 2, yPos);
    context.lineTo(this.centerX + this.tickSize / 2, yPos);
    context.stroke();
    context.fillText(unit, this.centerX - this.tickSize / 2 - 3, yPos);
    unit -= this.unitsPerTick;
    yPos = Math.round(yPos + yPosIncrement);
    }
    context.restore();
    };


    Graph.prototype.drawEquation = function(equation, color, thickness) {
    var context = this.context;
    context.save();
    context.save();
    this.transformContext();


    context.beginPath();
    context.moveTo(this.minX, equation(this.minX));


    for(var x = this.minX + this.iteration; x <= this.maxX; x += this.iteration) {
    context.lineTo(x, equation(x));
    }


    context.restore();
    context.lineJoin = 'round';
    context.lineWidth = thickness;
    context.strokeStyle = color;
    context.stroke();
    context.restore();
    };


    Graph.prototype.transformContext = function() {
    var context = this.context;


    // move context to center of canvas
    this.context.translate(this.centerX, this.centerY);


    /*
    * stretch grid to fit the canvas window, and
    * invert the y scale so that that increments
    * as you move upwards
    */
    context.scale(this.scaleX, -this.scaleY);
    };
    var myGraph = new Graph({
    canvasId: 'myCanvas',
    minX: -10,
    minY: -10,
    maxX: 10,
    maxY: 10,
    unitsPerTick: 1
    });


    myGraph.drawEquation(function(x) {
    return 5 * Math.sin(x);
    }, 'green', 3);


    myGraph.drawEquation(function(x) {
    return x * x;
    }, 'blue', 3);


    myGraph.drawEquation(function(x) {
    return 1 * x;
    }, 'red', 3);


    myGraph.drawEquation(function(x) {
    return 7 * Math.sin(x)/x;
    }, 'pink', 3);




    </script>
    </body>
    </html>
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar eq.rar‏ (1.4 کیلوبایت, 14 دیدار)

  10. #50
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    نمیدونم چرا پست رو پاک کردین
    ولی در ایمیل مشخص بود که به اکتیواکس codejoke اشاره کرده بودین.
    با codejoke آشنایی ندارم، ولی به اصل مطلب این پرسش که برای هر کاری باید از ابزار صحیح اون استفاده کرد رسیدین و اینجا هم در کل مجبوریم از اکتیوایکس (ولی مناسب) استفاده کنیم.
    سلام جناب mazoolagh عزیز !
    ببخشید این پست شما رو ندیده بودم
    بله ، همونطوری که بدرستی اشاره کردین مطلب حذف شده پست فوق در خصوص استفاده از کامپوننت codejoke برای اینکار بود .
    علی ایحال مجدد نمونه را در لینک زیر قرار داده ام
    در لینک یک نمونه که به زبان های VB ، VB.NETو C#‎‎‎‎‎‎‎‎.NET تهیه شده با اکتیوایکس مربوطه در پوشه Bin
    https://s17.picofile.com/file/841936...Graph.rar.html
    تصویری از گراف نمونه تهیه شده در محیط vb6 :
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 09 دی 1399 در 23:46 عصر

  11. #51
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    بنده قبلا بیشتر از اکتیوایکس CommandBars ، CommandBarsDesigner و SkinFramework و چندمورد دیگر در برنامه هایم استفاده می کردم .
    واقعاً کامپوننت های codejoke در نوع خودش بی نظیر هستند
    کاربرانی که دنبال منوهای زیبا و پیشرفته و جذاب نمودن محیط برنامه خود هستند تمایلی شدیدی به استفاده از این کامپوننت های codejoke دارند .
    ولی با این وجود با تمام جذابیت هائیکه که از استفاده از کامپوننت های Codejock مشاهده کرده ام اعتقاد دارم در محیط اکسس تاجائی که اجباری در کارنباشد از امکانات داخلی اکسس استفاده شود بهتراست . به هر حال استفاده از اکتیوایکس ها هم مشکلات و دردسرهای خاص خودش رو دارد .
    آخرین ویرایش به وسیله eb_1345 : چهارشنبه 10 دی 1399 در 00:08 صبح

  12. #52
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    اعتقاد دارم در محیط اکسس تاجائی که اجباری در کارنباشد از امکانات داخلی اکسس استفاده شود بهتراست . به هر حال استفاده از اکتیوایکس ها هم مشکلات و دردسرهای خاص خودش رو دارد .
    کاملا موافقم، بخصوص در آفیس 64 بیت.
    من از شما سخت گیر ترم، تا حد امکان از توابع api هم دوری میکنم و معتقدم اگر برای رسیدن به یک خواسته نیاز به وصله پینه زیادی به اکسس باشه یعنی اکسس انتخاب خوبی نیست و باید دنبال ابزار مناسبتری رفت.

  13. #53
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    Unbound Master-Detail Form

    هدف پیدا کردن روش مؤثر یا پاسخ قطعی امکان ساخت فرم unbound روی 2 جدول مرتبط بصورت master-detail هست.
    1- برای یکسان بودن شرایط و جلوگیری از پراکندگی بحث، دیتا نمونه پیوست شده و عملکرد و ظاهر فرم های unbound باید دقیقا کپی فرم های bound این دیتابیس باشد.
    2- چنانچه شدنی است، توضیح کدها و آوردن آن در متن پست با تگ مناسب شایسته است!
    3- چنانچه اینکار را نشدنی میدانید، توضیح مستدل نیاز است.
    فایل های ضمیمه فایل های ضمیمه

  14. #54
    کاربر دائمی آواتار narpco
    تاریخ عضویت
    فروردین 1397
    محل زندگی
    کرج
    پست
    352

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    دوستان ببخشید من میام وسط بحث شما این موضوع
    codejoke رو میشه توضیح بیشتر بفرمایید و اینکه در اکسس چطوری میشه دانلود و استفاده کرد ایا عکسی از نمونه کاربردهاش دارید ؟
    تو گوگل که بیشتر برای محیط های غیر اکسس--
    Visual Studio--
    من مطلب دیدم ....ممنون

  15. #55
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    در همین تالار پیشتر چندین بار دیدم در مورد اکتیوایکس codejoke بحث شده و حتی آموزش هم گذاشته بودن.
    جستجو رو از همینجا شروع میکردین احتمالا جواب گرفته بودین.
    اونها که شما دیدین کمپوننت های دات نت از همین شرکت بودن.

    هر موقع دیدین میزان خواسته هایی که اکسس مستقیما نمیتونه برآورده کنه از 2-3 تا رد شد، درجا برین سراغ راه حلی که اونها رو براحتی و بی دردسر انجام بده.
    کل خاصیت اکسس در سادگی و سرعت ساخت برنامه است، اگر قرار باشه با وصله پینه و سنگین کردن کد و نیاز به رجیستر چند اکتیوایکس و برنامه نصب و ... همه اینها رو کنار بگذاریم، خب از همون اول اول میریم سراغ فرضا دات نت که خیلی سریعتر و راحتتر به خواسته مون میرسیم و تکنولوژی روز هم هست - برخلاف اکتیوایکس که سالهاست مرده محسوب میشه.

    یک نمونه اش همین آخرین پرسشی هست که اینجا مطرح کردم و نشون میده که اکسس برای همه کاری حتی در زمینه دیتا الزاما ممکنه سریعترین و راحتترین راه نباشه!

  16. #56
    کاربر دائمی آواتار narpco
    تاریخ عضویت
    فروردین 1397
    محل زندگی
    کرج
    پست
    352

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    در همین تالار پیشتر چندین بار دیدم در مورد اکتیوایکس codejoke بحث شده و حتی آموزش هم گذاشته بودن.
    جستجو رو از همینجا شروع میکردین احتمالا جواب گرفته بودین.
    اونها که شما دیدین کمپوننت های دات نت از همین شرکت بودن.

    هر موقع دیدین میزان خواسته هایی که اکسس مستقیما نمیتونه برآورده کنه از 2-3 تا رد شد، درجا برین سراغ راه حلی که اونها رو براحتی و بی دردسر انجام بده.
    کل خاصیت اکسس در سادگی و سرعت ساخت برنامه است، اگر قرار باشه با وصله پینه و سنگین کردن کد و نیاز به رجیستر چند اکتیوایکس و برنامه نصب و ... همه اینها رو کنار بگذاریم، خب از همون اول اول میریم سراغ فرضا دات نت که خیلی سریعتر و راحتتر به خواسته مون میرسیم و تکنولوژی روز هم هست - برخلاف اکتیوایکس که سالهاست مرده محسوب میشه.

    یک نمونه اش همین آخرین پرسشی هست که اینجا مطرح کردم و نشون میده که اکسس برای همه کاری حتی در زمینه دیتا الزاما ممکنه سریعترین و راحتترین راه نباشه!

    ممنون از توضیحات .....پس کلا موضوع خاصی برای کار در اکسس نیست و بهتره که حتی المکان از امکانات خود اکسس استفاده کنیم .....فک کنم استفاده از برنامه های بقول شما وصل پینه ای سرعت برنامه رو کاهش میده و حجم فایل رو هم افزایش میده .....در دات نت دیده بودم شبیه این codejoke رو که همه امکانات خود فرم ها رو در قالبی شکیل تر نشون میده .......به هر حال ممنون ....

  17. #57
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: Unbound Master-Detail Form

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    هدف پیدا کردن روش مؤثر یا پاسخ قطعی امکان ساخت فرم unbound روی 2 جدول مرتبط بصورت master-detail هست.
    1- برای یکسان بودن شرایط و جلوگیری از پراکندگی بحث، دیتا نمونه پیوست شده و عملکرد و ظاهر فرم های unbound باید دقیقا کپی فرم های bound این دیتابیس باشد.
    2- چنانچه شدنی است، توضیح کدها و آوردن آن در متن پست با تگ مناسب شایسته است!
    3- چنانچه اینکار را نشدنی میدانید، توضیح مستدل نیاز است.
    این پست فعلا اینجا میمونه تا یک کاربر باتجربه و دانش کافی پیدا بشه!

  18. #58
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    RECORDSET/QUERY PAGING

    یک پرسش ساده تر مطرح میکنم که احتمالا نمونه کد آماده هم برای اون شاید پیدا بشه.

    هدف این هست که نتایج یک جدول/رکوردست/کوئری رو صفحه بندی کنیم.
    تعداد رکورد در هر صفحه پارامتر هست و شماره صفحه/صفحه قبل/صفحه بعد/صفحه اول/صفحه آخر باید پیاده بشه.
    خروجی روی فرم پیوسته یا لیست باکس هر دو قابل قبول هست.

  19. #59

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

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

  20. #60
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط ssadegh1365 مشاهده تاپیک
    هرکار کردم نتونستم. کسی نتونسته هنوز برام درستش کنه.
    دوست بزرگوار ! اینکه دوستان دیگری تا حالا به شما کمک نکرده اند دلیل بر این نیست که آنها هم توانائی انجام خواسته شما را نداشته باشند .
    نمونه هائی تحت عنوان گزارش ساز در تالار موجوده .
    موفق باشید

  21. #61
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط ssadegh1365 مشاهده تاپیک
    از جناب Mazoolagh خواهشمندم به برنامه بنده در تالار اکسس درباره مشکل در انتخاب فیلد از جدول و نمایش در لیست باکس نگاهی بندازن .
    درصورت امکان خواهشمندم درستش کنین.
    هرکار کردم نتونستم. کسی نتونسته هنوز برام درستش کنه.
    خیلی خیلی ببخشین
    مشکلی نیست جناب صادق،
    ولی راهنمایی کافی و وافی داده شده بود و باید قدری زحمت هم خودتون متحمل بشید یا اینکه صبر کنین دوستانی که راهنمایی کردن وقت آزاد داشته باشن.

  22. #62
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    دوست بزرگوار ! اینکه دوستان دیگری تا حالا به شما کمک نکرده اند دلیل بر این نیست که آنها هم توانائی انجام خواسته شما را نداشته باشند .
    نمونه هائی تحت عنوان گزارش ساز در تالار موجوده .
    موفق باشید
    حالا که زحمت کشیدین و تا اینجا اومدین خوشحال میشم روی paging هم نظر شما رو بدونم.

  23. #63
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    حالا که زحمت کشیدین و تا اینجا اومدین خوشحال میشم روی paging هم نظر شما رو بدونم.
    سلام جناب mazoolagh !
    راستش بنده تا حالا در خصوص کاربرد این موضوع (صفحه بندی نتایج یک جدول/رکوردست/کوئری) فکر نکرده ام
    حالا اگر فکر می کنید این موضوع مهم وکاربردی است بفرمائید تا بر روی این موضوع تمرکز کنم .
    فکر میکنم از طریق اسپلیت کردن تعداد رکورد برای هر صفحه بتوان به نتیجه رسید

  24. #64
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    سلام جناب mazoolagh !
    راستش بنده تا حالا در خصوص کاربرد این موضوع (صفحه بندی نتایج یک جدول/رکوردست/کوئری) فکر نکرده ام
    حالا اگر فکر می کنید این موضوع مهم وکاربردی است بفرمائید تا بر روی این موضوع تمرکز کنم .
    فکر میکنم از طریق اسپلیت کردن تعداد رکورد برای هر صفحه بتوان به نتیجه رسید
    با سلام مجدد
    نمونه ضمیمه رو بررسی بفرمائید !
    فقط ببخشین ! دیگر حال نداشتم توضیح کدها و متن آنها را در پست درج کنم
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 07 بهمن 1399 در 04:50 صبح

  25. #65
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نمونه پست قبل اصلاح شد
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 07 بهمن 1399 در 03:55 صبح

  26. #66
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    با سلام مجدد
    نمونه ضمیمه رو بررسی بفرمائید !
    فقط ببخشین ! دیگر حال نداشتم توضیح کدها و متن آنها را در پست درج کنم
    سلام و روز خوش
    ... time

  27. #67
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    سلام
    یک تغییر جزئی در کدها اعمال کردم
    البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 07 بهمن 1399 در 14:53 عصر

  28. #68
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    سلام
    یک تغییر جزئی در کدها اعمال کردم
    البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
    سلام و روز خوش
    برنامه بروز شده رو الان دیدم.

    چون اینجا هدف کلی اشتراک دانسته ها و یادگیری از همدیگر هست، بنابراین بیان مواردی که به ذهن میرسه به معنای خرده گیری نیست، و به همین سیاق پرسش درباره چرایی روش ها و راهکارها هم نشانه ناآگاهی نیست.

    اونجور که دیده میشه شما دو فیلد به جدول اضافه کردین؛ یکی برای شماره صفحه و یکی هم برای شماره ردیف در هر صفحه.
    روش رو بر این مبنا گذاشتین که یکبار کل جدول رو پیمایش و این دو فیلد رو محاسبه میکنین و بعد بر اساس این مقادیر، رکوردست فرم رو مشخص میکنین.

    اول از همه اینکه این روش کار میکنه، ولی چند مورد هست که مطرح میکنم:
    1- نیاز به انجام تغییرات در جدول داره.
    2- هنگام باز شدن فرم، محاسبه شماره صفحه پروسه زمانبری هست (با توجه به اینکه معمولا PAGING رو برای تعداد رکوردهای زیاد انجام میدیم)
    3- انعطاف پذیری نداره و HARD-CODE هست، یعنی برای یک جدول دیگه نیاز به کدنویسی مجدد داریم
    4- باحتمال زیاد پیاده سازی اون روی کوئری از جداول جوین شده، کار سخت و پیچیده ای خواهد بود.

    الف- بنظرم اگر فقط با جدول سروکار داشته باشیم، بدون تغییر در طراحی اون و محاسبه اولیه هم میتونیم PAGING رو پیاده کنیم.
    این مورد رو تست میکنم و سعی میکنم به جواب برسم.

    ب- اونچه از پرسش مد نظر من هست یک روش کلی و ژنریک بدون نیاز به دانستن ساختار کوئری هست و برای همین هم به مورد الف فکر نکرده بودم.

  29. #69
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    مورد بعدی اینکه paging واقعا یک نیاز و روش مفید هست و یک مسئله انتزاعی یا چالش توانایی کدنویسی نیست:
    هم سرعت لود شدن فرم رو بالا میبره و هم نیاز به اسکرول رو فقط که تعداد رکوردها زیاد هست مرتفع میکنه.

    برای همین هم بیشتر database-engine این رو در نظر دارن، هم providerها و گاهی در سطح کنترل هایی مثل grid هم پیاده میشه.

  30. #70
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    734

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک

    اول از همه اینکه این روش کار میکنه، ولی چند مورد هست که مطرح میکنم:
    1- نیاز به انجام تغییرات در جدول داره.
    2- هنگام باز شدن فرم، محاسبه شماره صفحه پروسه زمانبری هست (با توجه به اینکه معمولا PAGING رو برای تعداد رکوردهای زیاد انجام میدیم)
    3- انعطاف پذیری نداره و HARD-CODE هست، یعنی برای یک جدول دیگه نیاز به کدنویسی مجدد داریم
    4- باحتمال زیاد پیاده سازی اون روی کوئری از جداول جوین شده، کار سخت و پیچیده ای خواهد بود.

    الف- بنظرم اگر فقط با جدول سروکار داشته باشیم، بدون تغییر در طراحی اون و محاسبه اولیه هم میتونیم PAGING رو پیاده کنیم.
    این مورد رو تست میکنم و سعی میکنم به جواب برسم.

    ب- اونچه از پرسش مد نظر من هست یک روش کلی و ژنریک بدون نیاز به دانستن ساختار کوئری هست و برای همین هم به مورد الف فکر نکرده بودم.
    سلام
    فایل نمونه پست 67 برای شروع کار و براساس خواسته اولیه جنابعالی که بدون شرط مطرح کرده بودید تهیه شده بود .
    نمونه جدید رو بررسی بفرمائید !
    در نمونه جدید فرض بر این است که تمام جداولی که بر اساس این روش نتایج رکوردست آنها صفحه بندی شود دارای یک فیلد ID که مقادیر آن متوالی است میباشد. بنا بر این فرض اگر فیلد فوق از نوع اتونامبر میباشد و رکوردی حذف میشود فیلد فوق قبل از عملیات صفحه بندی رکوردها باید ریست شود و اگر از نوع نامبر هم است باز هم بعد از حذف باید شماره گذاری مجدد صورت گیرد.
    فایل های ضمیمه فایل های ضمیمه

  31. #71
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1392
    محل زندگی
    قزوین
    پست
    108

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    اون تاپیک خارج از دستور در واقع دون پاشی برای دوستانی مثل شما هست که به اونجا بیان و بتونم از دانسته هاشون بهره ببرم - البته به پیشگیری از آلزایمر هم بیربط نیست!
    خاطرم هست که در چند مورد شما من رو از اشتباه درآوردین و خوشحال میشم هنوز هم به این کار ادامه بدین و من جزو اون گروه ناشایست که اشاره کردین نباشم.
    هیچ مبحث بسته شده ای اونجا نیست و خوبیش اینه که اختلاف دیدگاه بین کسانی که صحبت هم رو میفهمن به راه های جدید منجر میشه و نه کدورت.
    سلام mazoolagh
    چوب کاری نفرمایید دوست من .
    اختلاف نظرم با شما بر سر کلیات پست 55 هستش
    ولی به دلایل ذیل در مبحث شرکت نکردم
    1 – ممکن بود به اشتباه این شبه ایجاد بشه که قصد مقایسه اکسس با دیگر محیطهای توسعه وجود داره
    2 – در خصوص مبحث اکتیو ایکس ها هم از اونجایی که نمی خواهم که شبه ای در خصوص ذی نفع بودنم در ذهن متبادر بشه , بر همین اساس ورود نکردم
    البته قبلا در پستهایی مجزا در این خصوص مطالبی درج شده بود که به همونها استناد میکنم .

    موفق باشید

  32. #72
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    سلام
    فایل نمونه پست 67 برای شروع کار و براساس خواسته اولیه جنابعالی که بدون شرط مطرح کرده بودید تهیه شده بود .
    نمونه جدید رو بررسی بفرمائید !
    در نمونه جدید فرض بر این است که تمام جداولی که بر اساس این روش نتایج رکوردست آنها صفحه بندی شود دارای یک فیلد ID که مقادیر آن متوالی است میباشد. بنا بر این فرض اگر فیلد فوق از نوع اتونامبر میباشد و رکوردی حذف میشود فیلد فوق قبل از عملیات صفحه بندی رکوردها باید ریست شود و اگر از نوع نامبر هم است باز هم بعد از حذف باید شماره گذاری مجدد صورت گیرد.
    سلام و روز خوش
    خب این نمونه بمراتب بهتر از نمونه اولیه هست (قطعا هم همینجور درسته و کارها بتدریج انجام میشه) و همچنین استفاده از id هم انتخاب کاملا منطقی و بجایی هست.
    یک مورد هست که: فکر کنم الزامی نباشه نگران این باشین که همه idها بدون جاافتادگی باشن (البته اینجوری راحتتره) و فقط یکتا بودنش کفایت میکنه، البته در کد نیاز به تغییرات داره.

    من هم یک نمونه آماده کردم که برای نظرخواهی همینجا پیوست میکنم (طبق عادت با عکس و تفصیلات)،
    و بعد اگر مایل باشین این بخش رو ببندیم و بریم سراغ روش ژنریک و عمومی.

  33. #73
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    نقل قول نوشته شده توسط New Account مشاهده تاپیک
    سلام mazoolagh
    چوب کاری نفرمایید دوست من .
    اختلاف نظرم با شما بر سر کلیات پست 55 هستش
    ولی به دلایل ذیل در مبحث شرکت نکردم
    1 – ممکن بود به اشتباه این شبه ایجاد بشه که قصد مقایسه اکسس با دیگر محیطهای توسعه وجود داره
    2 – در خصوص مبحث اکتیو ایکس ها هم از اونجایی که نمی خواهم که شبه ای در خصوص ذی نفع بودنم در ذهن متبادر بشه , بر همین اساس ورود نکردم
    البته قبلا در پستهایی مجزا در این خصوص مطالبی درج شده بود که به همونها استناد میکنم .

    موفق باشید
    سلام و روز خوش
    این لطف شماست که منو بعنوان دوست خطاب کردین هرچند که قبلا هم در عمل این موضوع رو نشون داده بودین.

    و در مورد کلیات پست 55 هم اونچه آمده نظر شخصی من بود، کما اینکه از api function هم تا حد امکان استفاده نمیکنم.
    همیجور هر نوع دستکاری در سیستم کاربر و حتی به قفل هم اعتقادی ندارم - کلا این روش من بوده و هست: This the way.

    با این وجود استفاده از محصول آماده (اکتیوایکس/کمپوننت/کتابخانه/...) هم یک امر منطقی و متعارف و برخی موارد ناگریز هست،
    و اگر کسی ابزار سودمندی رو در اختیار دیگران قرار میده (که خودشون دانش یا زمان کافی توسعه اون رو ندارن) جای تشکر و قدردانی داره و نه شک و شبهه.

    باز هم ممنونم که پاسخ دادین و رفع ابهام شد.
    کامیاب و کامروا باشین.

  34. #74
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    Data Paging

    Option Compare Database
    Option Explicit
    Const SQL = "SELECT TOP @PAGE_SIZE * FROM (SELECT TOP @P1 * FROM Products)" & _
    " WHERE ProductID NOT IN (SELECT TOP @P2 ProductID FROM Products)"


    Private DataSource As String
    Private Page_ As Integer
    Private PagesCount As Integer
    Private RecordsCount As Long

    Private Sub Form_Open(Cancel As Integer)
    RecordsCount = DCount("*", "Products")
    PageSize = 15
    PageSize_AfterUpdate
    End Sub

    Private Sub GO_FIRST_Click()
    Page_ = 1
    BIND
    End Sub

    Private Sub GO_PREVIOUS_Click()
    Page_ = Page_ - 1
    BIND
    End Sub

    Private Sub GO_NEXT_Click()
    Page_ = Page_ + 1
    BIND
    End Sub

    Private Sub GO_LAST_Click()
    Page_ = PagesCount
    BIND
    End Sub


    Private Sub BIND()
    If Page_ = 1 Then
    DataSource = "SELECT TOP @PAGE_SIZE * FROM Products"
    Else
    DataSource = Replace(SQL, "@P1", PageSize * Page_)
    DataSource = Replace(DataSource, "@P2", PageSize * (Page_ - 1))
    End If
    DataSource = Replace(DataSource, "@PAGE_SIZE", PageSize)
    Set Me.Recordset = CurrentDb.OpenRecordset(DataSource)
    Me.GO_FIRST.Enabled = Page_ > 1
    Me.GO_PREVIOUS.Enabled = Page_ > 1
    Me.GO_NEXT.Enabled = Page_ < PagesCount
    Me.GO_LAST.Enabled = Page_ < PagesCount
    Me.Indicator.Caption = "page " & Page_ & " of " & PagesCount
    Me.PageNumber = Page_
    End Sub


    Private Sub PageNumber_AfterUpdate()
    Page_ = Me.PageNumber
    BIND
    End Sub


    Private Sub PageSize_AfterUpdate()
    PagesCount = RecordsCount / PageSize
    If PagesCount * PageSize < RecordsCount Then PagesCount = PagesCount + 1
    Me.PageNumber.RowSource = ""
    Dim i As Integer
    For i = 1 To PagesCount
    Me.PageNumber.AddItem (i)
    Next i
    GO_FIRST_Click
    End Sub


    Private Sub PageSize_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    Me.PageSize = 15
    End Sub

    Private Sub PageNumber_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    Me.PageNumber = 1
    End Sub



  35. #75
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    RECORDSET/QUERY PAGING

    نمونه paging
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله mazoolagh : دوشنبه 20 بهمن 1399 در 17:17 عصر

  36. #76
    کاربر دائمی آواتار ARData
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    Karaj
    سن
    40
    پست
    431

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    سلام
    سخت ترین فرمولی که من تا حالا نتونستم انجامش بدم و هربار به بن بست خوردم فرمول کاتینگ ورق برای برش طول و عرض های مورد نیاز بر اساس متریال ورق استاندارد موجود که کمترین پرت را داشته باشد - فقط یک شرکت هندی موفق شده این فرمول رو درست اجرا کنه
    البته با توجه به نیاز بعد گرافیکی به اینکار ، در صورت کشف فرمول و ابعاد و اندازه نیازی به گرافیک نخواهد بود

  37. #77
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    ADO Recordset Paging

    در ادامه بحث paging، الان که چند نمونه اولیه آورده شده و کلیت موضوع هم نشون داده شده، موقعیت مناسبی هست که روش اصولی رو معرفی و دنبال کنیم.
    منظور از اصولی این هست که:
    1- محاسبات paging رو از روی دوش خودمون برداریم و به دوش موتور دیتابیس یا provider بگذاریم (قطعا در اینها از هرنظر کدهای بهتری استفاده شده)
    2- پیاده سازی اون راحت و ساده باشه و با عوض شدن دیتا نیاز به تغییراتی بیشتر از فیلدهای مورد نمایش نداشته باشیم (مثل هر فرم معمولی)

    همونجور که در پست شماره 69 اشاره کرده بودم، بعضی providerها تمهیدات لازم رو برای اینکار آماده و کار ما رو راحت کردن.
    در ado سه property برای رکوردست تعریف شده: PageSize , AbsolutePage , PageCount که در صورت تمایل میتونین مستندات اون رو بخونین.
    آخرین ویرایش به وسیله mazoolagh : دوشنبه 20 بهمن 1399 در 17:18 عصر

  38. #78
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    ADO Recordset Paging

    کوئری زیر رو درنظر بگیرین:
    SELECT S.FullName AS Student, CT.CourseTitle AS Course, C.Year, C.Term, I.FullName AS Instructor, G.Final
    FROM (((Courses AS C
    INNER JOIN CourseTitles AS CT ON C.CourseTitleID = CT.CourseTitleID)
    INNER JOIN Gradings AS G ON C.CourseID = G.CourseID)
    INNER JOIN Instructors AS I ON C.InstructorID = I.InstructorID)
    INNER JOIN Students AS S ON G.StudentID = S.StudentID


    مشابه نمونه قبلی، اول یک فرم unbound با توجه به فیلدها میسازیم و کنترلهای paging رو هم اضافه میکنیم.
    آخرین ویرایش به وسیله mazoolagh : دوشنبه 20 بهمن 1399 در 17:18 عصر

  39. #79
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    ADO Recordset Paging

    Option Compare DatabaseOption Explicit
    Private Page_ As Integer
    Private PagesCount As Integer
    Private RecordsCount As Long
    Dim rs As ADODB.Recordset
    Dim rsx As ADODB.Recordset

    Private Sub Form_Close()
    rs.Close
    Set rs = Nothing
    Set rsx = Nothing
    End Sub

    Private Sub Form_Open(Cancel As Integer)
    Set rsx = New ADODB.Recordset
    With rsx
    .CursorLocation = adUseClient
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Fields.Append "Row", adInteger, , adFldKeyColumn + adFldRowID
    .Fields.Append "Student", adVarWChar, 100, adFldMayBeNull
    .Fields.Append "Course", adVarWChar, 100, adFldMayBeNull
    .Fields.Append "Instructor", adVarWChar, 100, adFldMayBeNull
    .Fields.Append "Year", adInteger, , adFldMayBeNull
    .Fields.Append "Term", adInteger, , adFldMayBeNull
    .Fields.Append "Final", adInteger, , adFldMayBeNull
    .ActiveConnection = Nothing
    .Open
    End With

    PageSize = 15
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.PageSize = PageSize
    rs.Open "select * from Results", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
    RecordsCount = rs.RecordCount
    PageSize_AfterUpdate
    End Sub

    Private Sub GO_FIRST_Click()
    Page_ = 1
    Bind
    End Sub

    Private Sub GO_PREVIOUS_Click()
    Page_ = Page_ - 1
    Bind
    End Sub

    Private Sub GO_NEXT_Click()
    Page_ = Page_ + 1
    Bind
    End Sub

    Private Sub GO_LAST_Click()
    Page_ = PagesCount
    Bind
    End Sub

    Private Sub Bind()
    Set Me.Recordset = Nothing
    Do While Not rsx.EOF
    rsx.Delete
    rsx.MoveFirst
    Loop
    rs.AbsolutePage = Page_
    Dim i As Integer
    For i = 1 To rs.PageSize
    If rs.EOF Then Exit For
    rsx.AddNew
    rsx("Row") = rs.AbsolutePosition
    rsx("Student") = rs("Student")
    rsx("Course") = rs("Course")
    rsx("Year") = rs("Year")
    rsx("Term") = rs("Term")
    rsx("Instructor") = rs("Instructor")
    rsx("Final") = rs("Final")
    rsx.Update
    rs.MoveNext
    Next
    Set Me.Recordset = rsx
    Me.GO_FIRST.Enabled = Page_ > 1
    Me.GO_PREVIOUS.Enabled = Page_ > 1
    Me.GO_NEXT.Enabled = Page_ < PagesCount
    Me.GO_LAST.Enabled = Page_ < PagesCount
    Me.PageNumber = Page_
    End Sub

    Private Sub PageNumber_AfterUpdate()
    If Me.PageNumber > PagesCount Then Me.PageNumber = PagesCount
    If Me.PageNumber < 1 Then Me.PageNumber = 1
    Page_ = Me.PageNumber
    Bind
    End Sub

    Private Sub PageSize_AfterUpdate()
    rs.PageSize = PageSize
    PagesCount = rs.PageCount
    Me.PageNumber.RowSource = ""
    Dim i As Integer
    For i = 1 To PagesCount
    Me.PageNumber.AddItem (i)
    Next i
    Me.Indicator.Caption = "of " & PagesCount
    GO_FIRST_Click
    End Sub

    Private Sub PageSize_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    Me.PageSize = 15
    End Sub

    Private Sub PageNumber_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    Me.PageNumber = 1
    End Sub
    آخرین ویرایش به وسیله mazoolagh : دوشنبه 20 بهمن 1399 در 17:18 عصر

  40. #80
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    ADO Recordset Paging

    اگر دقت کنین برای نمایش شماره ردیف یک فیلد Row به فیلدهای کوئری اضافه کردیم که برخلاف dao ، اینکار در ado خیلی راحت و شدنی هست.

    1.PNG

    همچنین سرعت خوبی حتی در تعداد رکورد زیاد داریم.

صفحه 2 از 4 اولاول 1234 آخرآخر

تاپیک های مشابه

  1. پاسخ: 4
    آخرین پست: سه شنبه 27 فروردین 1392, 14:31 عصر
  2. پاسخ: 0
    آخرین پست: چهارشنبه 21 فروردین 1392, 13:02 عصر
  3. پاسخ: 1
    آخرین پست: سه شنبه 12 بهمن 1389, 11:03 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •