View Full Version : فاکس پرو و MySQL
rezaTavak
پنج شنبه 01 بهمن 1383, 18:33 عصر
سلام
من در این قسمت می خواهم گام به گام ارتباط بین فاکس و MySql را هر چه که تجربه کرده ام به دیگران هم بیاموزم.
مرحله اول:
MySql را دانلود کنید: http://dev.mysql.com/downloads/
ابزار ODBC آنرا هم از آدرس بالا دریافت کنید. البته MySQL تحت ویندوز را!
خب حالا نرم افزارهای دانلود شده را نصب کنید.
فرض من بر این است که آنها را در شاخه C:\MySQL نصب کرده اید.
برای تنظیم MySQL بایستی فایل My.ini را در شاخه ویندوزتان تنظیم کنید.
winmysqladmin در ویندوز برای تنظیم بکار میرود.
فایلهای Mysqld و Mysqld-nt برای راه اندازی سرویس مربوطه ضروی هستند. و Mysql برنامه ارتباطی و محل دستورات است.
همه اینها در شاخه Bin قرار دارند. در شاخه DOCs توضیحات مفصلی در این باره خواهید یافت. Data معمولا محل نگهداری داده ها است که در فابل My.ini تنظیم میشود. libmySQL.dll یکی از فایلهای ضروری است.
خب ادامه را به بعد موکول میکنم.
ALI RAFFIE
جمعه 02 بهمن 1383, 00:44 صبح
ممنون :flower:
rezamim
جمعه 02 بهمن 1383, 11:38 صبح
دست شما درد نکنه . ولی خواهش میکنم وسط راه رها نشه.
ممنون
rezaTavak
جمعه 02 بهمن 1383, 18:21 عصر
خب ادامه بحث:
تا اینجا شما ابزارهای لازم را نصب کرده اید. حالا نوبت به کار در MySql است. به شاخه C:\MySQL\Bin بروید و در صورتیکه در ویندوز 98 هستید MySQLd و در صورتیکه در رده Nt هستید MySQLd-nt را اجرا کنید. سپس MySQL را اجرا کنید(تمام فایلها با پسوند EXE) حالا وارد محیطی سیاه رنگ شده اید که محل تایپ دستورات است. اگر وارد این محیط نشدید پیغام خطایی دارید که نشاندهنده خطا است.
در این محیط شما فقط به چند چیز در ابتدا نیازمندید:
1- ساختن دیتابیس.
2- ساختن جدول.
3- ساختن ایندکس.
متاسفانه برعکس MSSQL هیچ محیط گرافیکی برای این کار وجود ندارد. اما خوشبختانه دستوراتی شبیه FOXPRO دارد! C:\mysql\Docs\manual.html توضیجاتی اساسی در این زمینه دارد. مثلا برای ساخت یک جدول :
13.2.5 CREATE TABLE Syntax
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]
or:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(] LIKE old_tbl_name [)];
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[[PRIMARY] KEY] [COMMENT 'string'] [reference_definition]
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| KEY [index_name] [index_type] (index_col_name,...)
| INDEX [index_name] [index_type] (index_col_name,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] [index_type] (index_col_name,...)
| FULLTEXT [INDEX] [index_name] (index_col_name,...)
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
| INT[(length)] [UNSIGNED] [ZEROFILL]
| INTEGER[(length)] [UNSIGNED] [ZEROFILL]
| BIGINT[(length)] [UNSIGNED] [ZEROFILL]
| REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
| NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
| CHAR(length) [BINARY | ASCII | UNICODE]
| VARCHAR(length) [BINARY]
| DATE
| TIME
| TIMESTAMP
| DATETIME
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT
| TEXT
| MEDIUMTEXT
| LONGTEXT
| ENUM(value1,value2,value3,...)
| SET(value1,value2,value3,...)
index_col_name:
col_name [(length)] [ASC | DESC]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options: table_option [table_option] ...
table_option:
{ENGINE | TYPE} = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM}
| AUTO_INCREMENT = #
| AVG_ROW_LENGTH = #
| CHECKSUM = {0 | 1}
| COMMENT = 'string'
| MAX_ROWS = #
| MIN_ROWS = #
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = 'string'
| DELAY_KEY_WRITE = {0 | 1}
| ROW_FORMAT = { DEFAULT | DYNAMIC | FIXED | COMPRESSED }
| RAID_TYPE = { 1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#
| UNION = (table_name,[table_name...])
| INSERT_METHOD = { NO | FIRST | LAST }
| DATA DIRECTORY = 'absolute path to directory'
| INDEX DIRECTORY = 'absolute path to directory'
| DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]
select_statement:
[IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)
این توضیجات فایل ذکر شده وجود دارد. شما هم برای استفاده از این نرم افزار بسیار قدرتمند از این راهنما استفاده کنید.
اما در MySQL دیتابیس چیست؟
در شاخه C:\mysql\data که پیش فرض است دیتابیسها قرار میگیرند. و یک دیتابیس چیزی نیست به غیر از یک شاخه یا دایرکتوری یا فولدر. حتی دستی شما اگر یک شاخه در این قسمت ایجاد کنید دیتابیس شما ساخته میشود! اما دستور اینکار:
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...]
مثال:
CREATE DATABASE Exam1
خب بعد از ساخت دیتا بیس نوبت نحوه استفاده از آن است:
use database
یک دیتابیس را مورد استفاده قرار میدهد.
حالا نوبت به ساخت جدول میرسد اما انواع داده در MySQL:
11 Column Types
11.1 Numeric Types
Type Bytes From To
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807
11.2 Date and Time Types
Column type ``Zero'' value
DATETIME '0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP 00000000000000 (length depends on display size)
TIME '00:00:00'
YEAR 0000
11.3 String Types
Type Max.size Bytes
TINYTEXT or TINYBLOB 2^8-1 255
TEXT or BLOB 2^16-1 (64K-1) 65535
MEDIUMTEXT or MEDIUMBLOB 2^24-1 (16M-1) 16777215
LONGBLOB 2^32-1 (4G-1) 4294967295
11.3.3 The ENUM Type
11.3.4 The SET Type
در فایل راهنما شمارا در باره تمام انواع داده آگاه میسازد. انواع داده ای که به تازگی فاکس 9 هم از برخی از آنها بهره می برد مانند VarChar.
خب همه اینها مانند فاکس پرو نیستند شما بایستی در قسمت 11.5 Using Column Types from Other Database Engines به توصیه های شده عمل کنید.
خب یک بانک ساده که در رهنما هست میسازیم:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
راستی یادم رفت بگم قانون مای با فاکس در تایپ این تفاوت را داره که آخر خط فاکس هیچی نیست و اگر ; بود یعنی ادامه در خط بعد اما مای برعکس هر وقت خواستیم خط را تموم کنیم ; میزنیم و مثل زبان سی یا پاسکال است.
خب چون توضیحات زیاد شده بقیه بعداً میگم.
rezaTavak
جمعه 02 بهمن 1383, 19:26 عصر
سلام
آدرس زیر یکی از سایتهایی که ODBC را میتوانید دریافت کنید نشان میدهد
http://dev.mysql.com/get/Downloads/MyODBC3/MyODBC-3.51.10-2-win.msi/from/pick
آدرس زیر محل دریافت خود مای سکوئل است:
http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-4.1.9-win32.zip/from/pick
rezaTavak
شنبه 03 بهمن 1383, 21:05 عصر
یک موضوع که مهم است اینه که اگه جداول شما حجمشون کم باشه بهتر از خود جداول فاکس استفاده کنید. چونکه سرعت در فاکس بیشتره تا ارتباط با بانک دیگه. و یک مسئله دیگه اینه که بعد از ارتباط یک View ساخته میشه که مثل جداول فاکس با آن کار کنید. پس تمام خصوصیات این جدول از خصوصیات فاکس میشه یعنی حداکثرهایی که فاکس پشتیبانی میکنه.
خب برای تبدیل جداول فاکس به مای از
ftp://leafe.com/stru2mysql.PRG
استفاده کنید. این برنامه یک فایل ایجاد میکند که در ان یک دستور Create Table وجود دارد. برای ساختن جدول در مای سکوئل این فایل بایستی در مای سکوئل اجرا شود:
shell> mysql db_name < script.sql > output.tab
OR
mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables.sql
حالا فقط ساختن ایندکس باقی مانده:
13.2.4 CREATE INDEX Syntax
CREATE [UNIQUE|FULLTEXT] INDEX index_name [index_type]
ON tbl_name (index_col_name,...)
و یک مثال در فایل Docs.htm :
mysql> CREATE INDEX part_of_name ON customer (name(10));
از این مرحله به بعد دیگر کاری به مای سکوئل نداریم و کافیست Mysqld در حالت اجرا باشد.
rezaTavak
دوشنبه 05 بهمن 1383, 14:26 عصر
سلام
ادامه بحث:
اول لطفا نظر بدید و بگید توضیحات خوب و کافیه؟
اما گفتم که حداقل کاری که باید در مای سکوئل کنیم تمام شده اما یک برنامه نویس حرفه ای بایستی با دستورات کار کند و دستوری که ما نیاز داریم در آن تمام دستورات مای سکوئل را بدانیم
SQLEXEC(nStatementHandle, [cSQLCommand, [cCursorName[, aCountInfo]]])
است. پارامتر cSQLCommand دستورات مای سکوئل باید باشد. مثلاً
a = SQLSTRINGCONNECT("DSN=Test;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=test;SERVER=localhost;UID=;PASSWORD=; PORT=3306;OPTION=3;STMT=;",.T.)
SQLEXEC(a,"select ABS(-10)")
BROWSE
خب حالا توابع در کدام قسمت فایل راهنما توضیح داده شده اند؟
12 Functions and Operators
را بایستی دنبال کنید.یک لیست بلند بالا از تمام توابع.
rezaTavak
دوشنبه 05 بهمن 1383, 18:42 عصر
خب تا اینجا دیگه کافیه بهتر بریم سراغ خود فاکس:
یک پروژه بسازید و در آن:
یک دیتا بیس بسازید و در آن:
در آن یک کانکشن ایجاد کنید. با استفاده از مراحل زیر:
بر روی گزینه Connections کلیک کنید.
دکمه New را فشار دهید تا کانکشن جدید ساخته شود.
هنگامی که وارد پنجره شدید Connection String را انتخاب و روی ... روبروی آن کلیک کنید.
پنجره Select Data Source که ظاهر شد روی صفحه machine data source کلیک کنید و دکمه New را فشار دهید. Create Data source پدیدار میشود روی UserData Source کلیک کنید و درایور Odbc مای سکوئل را انتخاب کنید. و بعد نام دیتابیستان را انتخاب کنید.
خب اگه تا اینجا درست کار کرده باشید بایستی کانکشن درست جواب بده و Connection Succed نمایش داده بشه. از این پنجره خارج شده و نامی که میخواهید را به کانکشنتان بدهید.
خب فقط ساختن View مانده تا دیتا بیس مانند یک جدول فاکس بشود!
لطفا تا اینجا نظر بدید.
habdolah
دوشنبه 05 بهمن 1383, 23:14 عصر
خیلی ممنون
rezamim
سه شنبه 06 بهمن 1383, 08:34 صبح
من که متاسفانه فعلا درگیر برنامه هستم ولی حتما انجام میدم تا این موضوع رو یاد بگیرم .
میشه بگید چطور این صفحه رو ذخیره کنیم که اگر سایت منفجر شد :mrgreen: اونو داشته باشیم؟
rezaTavak
سه شنبه 06 بهمن 1383, 11:00 صبح
گزینه منوی فایل SaveAs صفحات ذخیره میشوند!
rezamim
سه شنبه 06 بهمن 1383, 15:42 عصر
جالبتر اینکه میگه این صفحه قابل ذخیره کردن نیست :موفق:
binyaz2003
سه شنبه 06 بهمن 1383, 15:52 عصر
سلام
برنامه نویس رو باید بصورت web archive (mht) ذخیره کرد :sunglass:
habdolah
یک شنبه 11 بهمن 1383, 21:43 عصر
سلام
من تمام مراحل مطرح شده را انجام داده و یک View نیز درست کردم و با استفاده از دستور Repl اطلاعات آن را تغییر دادم اما وقتی از طریق Sql Server جدول را مشاهده مینمایم تعییرات اعمال نشده است......؟
با تشکر
rezaTavak
یک شنبه 11 بهمن 1383, 22:12 عصر
سلام
تا همین جا که بیشتر توضیح نداده بودم (ساختن ویو). ادامه را حتما می دهم.
اگر شما از قبل آشنا نبودید نشون میده بد توضیح ندادم نه؟ فرداشب ادامه موضوع و آخرین قسمت اصلی را توضیح می دهم.
habdolah
دوشنبه 12 بهمن 1383, 06:27 صبح
متشکرم
rezaTavak
سه شنبه 13 بهمن 1383, 20:34 عصر
ساختن یک ویوی راه دور
منظور از ویوی راه دور ویویی است که از جداول غیر فاکس پرو و از طریق ODBC ساخته می شود. یک ویو پس از ساخت یک جدول فاکس است بنابراین باید دقت داشت که تمام خصوصیات یک جدول فاکس را به همراه خواهد داشت. مثلا حداکثر 2گیگا بایت حجم. اگر یک ویوی راه دور دارای نوع داده ای است که در فاکس وجود ندارد؛ یا شبیه آن یا از کاراکتری استفاده کنید. دقت داشته باشید هر چه ویوی شما کم حجم تر باشد بهتر است. بنابراین با فیلتر گذاری درست جدولی محدود و خلاصه و مفید بسازید.
خب حالا می خواهیم یک ویوی قابل تغییر بسازیم:
بر روی دیتابیس خود روی Remote View کلیک کرده و New را انتخاب کنید. اگر از قبل Connection ساخته باشید آن نمایش داده میشود. و در پایین دو گزینه وجود دارد:
1- Connections
2- Available Data Source
بگذارید همان اولی باشد. چون دومی اطلاعات مرتبط با فایل ODBC.INI که در شاخه ویندوزتان قرار دارد را بر میگرداند. اولی این مزیت را دارد که اگر Connection شما در موقع ساخت Display ODBC login prompt آن Never باشد هیچ چیزی نشان کاربر نخواهد داد. و مانند یک جدول خوب عمل خواهد کرد بی هیچ سوالی!
دکمه Ok شما را به ساخت ویوی فاکس می برد. مانند جداول و دیتابیس فاکس عمل کنید و ویوی خود را بسازید. دقیقا همانگونه که در فاکس عمل میکنید. خب ویوی شما حاضر است آنرا میتوانید اجرا کنید. ولی قابل تغییر نیست! یعنی هر چه هم تغییری بدهید بی نتیجه است و در بانک ذخیره نمیشود.
یک چیزی اینجا در نظر داشته باشید که برای ویو داخلی فاکس هم خوب است. یعنی بروز کزدن ویو!
صفحه Update Criteria برای بروز کردن ویو است. حالا هر قسمت را جدا جدا توضیح میدهم.
ابتدا یک نکته وجود دارد: فیلدی باید به عنوان فیلدی که حالت Primary Key داشته باشد را در جداول مای سکوئل از قبل ساخته باشد و جبرا محتوات هر رکورد این فیلد منحصر به فرد است. (تعریف فیلد Primary) برای بروز شدن این فیلد ضروری بوده و در صورتی که تکراری از این فیلد در رکوردها مشاهده شود جدول بروز نمیشود! این فیلد را با تیک در قسمتی که کیلد نشان داده شده مشخص کنید. بعد از اینکه این کلید مشخص شد یک مداد هم نمایان میشود که فیلدی که باید بروز شود را میتوانید تیک بزنید.
1- Table: این کامبو لیست جداول و همه جدوال را نشان میدهد. شما میتوانید هر جدول یا تمام جداول را انتخاب کنید. دقت کنید در صفحه فیلدهای جداول باید انتخاب شده باشند.
2- دکمه Rest Key: تمام تیکهای فیلدهایی که باید بروز شود را و همچنین فیلد مطابقت را بر میدارد.
3- Update All: تمام فیلدها را جهت بروز شدن انتخاب میکند. دقت کنید فیلد مطابقت باید تیک داشته تا این دکمه دستور فعال باشد.
4- Send SQL Update: در صورتیکه این چک باکس تیک بخورد اطلاعات بروز میشود و اگر تیک نداشته باشد بروز نخواهد شد.
5- Field Name Pane: در اینجا نام فیلدها و کلید و بروز شدن فیلد را مشخص میکنید که در بالا توضیح داده شد.
6- SQL WHERE Clause includes: که نشان دهنده این است که در چه صورت جدول به روز شود؟ در واقع این به این درد میخورد که اگر کاربر دیگر جدول را تغییر داده بود چه رفتاری باید به انجام برسد؟
7- Update Using: این هم معلوم است. و دو حالت بروز رسانی و حذف و ایجاد دارد که خود گویاست. به نظر من هم بروزرسانی کار درستی است چون حجم جدول زیاد نمیشود.
دقت کنید در برنامه نویسی شبکه خطای 1585 "Record has been modified by another" or Error 1494 "Update conflict. Use TABLEUPDATE() to force the update or TABLEREVERT() to rollback". رخ ندهد.
روش دیگری هم غیر از این است و آن روش استفاده از فرامین و دستورات به جای ساختن ویو و ارتباط ویژوال است. ارجحیتی که دستور دارد این است که اگر بانک شما دارای رمز باشد با این رمز بایستی در Connection ذخیره شود و کسی که خبره کار باشد بانک شما را باز کرده و رمز مای سکوئل شما را برمیدارد. راه مقابله با این کار این است که بانک در دل فایل EXE باشد. اما دستور فقط با ریفاکس قابل مشاهده است. یک مزیت دیگر اینکه دستور انعطاف دارد و از طریق SQLEXEC کنترلی روی کار دارید.
یک چیزی که من چند مدتی با آن درگیر بودم این بود که Login نمایش داده نشود. برای آن دسته از عزیزانی که این موضوع را می خواهند بدانند متذکر میشوم که توضیحات در فایل راهنمای فاکس در قسمت SQLSETPROP( ) قرار دارد. منظور Displogin است.
در استفاده از دستور هم بایستی اول کانکشن ساخته و ویوی قابل بروز رسانی ساخته شود و آنگاه شما جداولی مانند فاکس خواهید داشت. این را من به عهده خودتان می گذارم.
خب دیگر شما براحتی میتوانید در فاکس از مای سکوئل بهره ببرید. و جذابیت آن را حس کنید! دیگر نگران حجم جداول و سرعت پردازش بانک خود نباشید. و کار را به مای سکوئل بپردازید. البته با تدبیر و دور اندیشی.
البته این فقط تجربیات من بود. درستی و نادرستی آنرا ببخشید.
rezaTavak
چهارشنبه 14 بهمن 1383, 19:17 عصر
ادامه:
این یک مثال با کد:
SQLSETPROP(0,"DispLogin",3)
SQLSETPROP(0,"Asynchronous",.F.)
SQLSETPROP(0,"BatchMode",.T.)
SQLSETPROP(0,"PacketSize",4096)
SQLSETPROP(0,"ConnectTimeOut",15)
SQLSETPROP(0,"WaitTime",100)
SQLSETPROP(0,"DispWarnings",.F.)
*
nH = SQLSTRINGCONNECT("DSN=person;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=person;SERVER=localhost;UID=;PASSWORD =;PORT=3306;OPTION=3;STMT=;")
IF nH < 1
RETURN .F.
ENDIF
*
SQLEXEC(nH,"SELECT * FROM person Person","Person")
*
CURSORSETPROP("Tables","person","person")
*
CURSORSETPROP("KeyFieldList","nRelate","person")
*
CURSORSETPROP("UpdatableFieldList","nRelate, cName, cFamily, lSex","person")
CURSORSETPROP("UpdateNameList","nRelate Person.nRelate," +;
" cName Person.cName," +;
" cFamily Person.cFamily"+;
" lSex person.lSex","Person")
CURSORSETPROP("SendUpdates",.T.,"person")
*
BROWSE
*!* USE
*!* SQLDISCONNECT(nh)
rezaTavak
چهارشنبه 14 بهمن 1383, 19:22 عصر
برای توضیحات بیشتر از کتاب Book_cs.rar که در BriefCase آقای حیدری کیا است استفاده کنید. البته اون برای میکروسافت سکوئل سرور است و فرقی زیاد نداره. در اینجا جا داره از آقای حیدری کیا هم بخاطر این کتاب تشکر کنم.
kia1349
شنبه 17 بهمن 1383, 16:24 عصر
زحمت اصلی با شماست که دارید اطلاعات رو به دوستان میرسونید
از تلاشتون ممنونم
rezaTavak
شنبه 17 بهمن 1383, 19:37 عصر
خواهش میکنم. زکات علم نشر است. (البته اگه چیزی بدونم!)
naderigh
سه شنبه 20 بهمن 1383, 10:08 صبح
آقا ای ول مرحبا :تشویق:
binyaz2003
جمعه 23 بهمن 1383, 18:02 عصر
سلام
لطفا برای موارد زیر هم توضیح بدین:
1-تعریف کاربر و دادن سطح دسترسی
2-نحوه گرفتن backup و restore کردن اطلاعات از طریق کد
3-نحوه ساختن ستاپ برای برنامه
ممنون
rezaTavak
شنبه 24 بهمن 1383, 20:15 عصر
چشم حتما. :oops:
rezaTavak
دوشنبه 26 بهمن 1383, 06:21 صبح
نحوه BackUp و Restore:
در MySQL جداول به صورت فایلهای مجزا هستند و توضیح دادم که بانک فقط یک شاخه است. پس یک شاخه دیگر بسازید مثلا C:\Backup\MySQL\Person و اطلاعات جداول را در آن قرار دهید.
اول با جدول از طریق دستورات ارتباط برقرار کنید سپس از طریق دستور SQLEXEC اول جدول را قفل کنید.
سپس پشتیبان بگیرید و دوباره قفل را باز کنید.
مثال:
SQLSETPROP(0,"DispLogin",3)
SQLSETPROP(0,"Asynchronous",.F.)
SQLSETPROP(0,"BatchMode",.T.)
SQLSETPROP(0,"PacketSize",4096)
SQLSETPROP(0,"ConnectTimeOut",15)
SQLSETPROP(0,"WaitTime",100)
SQLSETPROP(0,"DispWarnings",.F.)
*
nH = SQLSTRINGCONNECT("DSN=person;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=person;SERVER=localhost;UID=;PASSWORD =;PORT=3306;OPTION=3;STMT=;")
IF nH < 1
RETURN .F.
ENDIF
*
SQLEXEC(nH, "LOCK TABLES person WRITE;", "Person")
SQLEXEC(nH, "BACKUP TABLE person TO 'c:/Backup/MySQL/Person';", "Person")
SQLEXEC(nH, "UNLOCK TABLES;", "Person")
آنچه مهم است این است که بدانید در لینوکس مسیر با / مشخص میشود و شما هم از همین روش استفاده کنید حتی در ویندوز.
برگردانیدن پشتیبان:
مثل توضیحات فوق با این تفاوت که به جای Backup از Restore استفاده کنید.
بخشهای زیر در همان فایل راهنما را ببیند:
13.5.2.2 BACKUP TABLE Syntax
13.5.2.7 RESTORE TABLE Syntax
13.4.5 LOCK TABLES and UNLOCK TABLES Syntax.
5.6 Disaster Prevention and Recovery
ساختن کاربر:
قبل از هر کاری بایستی که محدودیت ورود برای مای سکوئل تعریف کنید دستور این کار:
SQLEXEC(nH, "SET PASSWORD = PASSWORD('hi');", "Person")
خب حالا دیگر کسی از خط دستور داس هم نمی تواند وارد سیستم شود. برای برداشتن رمز هم جای رمز را خالی بگذارید. مواظب باشید که در دستور SQLSTRINGCONNECT و SQLCONNECT هم از این رمز استفاده کنید. نام کاربر ODBC است. حالا از خط دستور داس باید تایپ کنید MySQL -p و رمز را بدهید.
البته دقت کنید مسائلی که من مطرح میکنم منحصرابرای ویندوز است و در لینوکس قضیه کمی متفاوت است.
این را بدانیم که تمام اطلاعات در شاخه c:\mysql\data\mysql ذخیره میشود و فایلهای حاوی User هم ایم اطلاعات را در خود جا دارند. این فایل را در فاکس باز میکنیم.
SQLSETPROP(0,"DispLogin",3)
SQLSETPROP(0,"Asynchronous",.F.)
SQLSETPROP(0,"BatchMode",.T.)
SQLSETPROP(0,"PacketSize",4096)
SQLSETPROP(0,"ConnectTimeOut",15)
SQLSETPROP(0,"WaitTime",100)
SQLSETPROP(0,"DispWarnings",.F.)
*
nH = SQLSTRINGCONNECT("DSN=person;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=person;SERVER=localhost;UID=ODBC;PASS WORD=hi;PORT=3306;OPTION=3;STMT=;")
IF nH < 1
RETURN .F.
ENDIF
*
SQLEXEC(nH,"SELECT * FROM Mysql.user Person","Person")
BROWSE
خب من چکار کردم!؟!؟!؟! از یک بانک جدول بانک دیگه را باز کردم !؟ آخه میدونید کار گرافیکی راحتتره.
حال جدول را نگاه کنیم. خودتون میفیهید چیه نه؟ جالبه. خب دست بکار بشید و جلوی نفوذ بیگانه را بگیرد. البته اگه ببگانه خودی نباشه.
یه دستور هست که روی این جدول کار میکنه یعنی GRANT
یه نگاهی به این قسمت راهنما بیاندازید:
13.5 Database Administration Statements
13.5.1 Account Management Statements
13.5.1.1 GRANT and REVOKE Syntax
GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY [PASSWORD] 'password']
[, user_name [IDENTIFIED BY [PASSWORD] 'password'] ...]
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER cipher [AND]]
[ISSUER issuer [AND]]
[SUBJECT subject]]
[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # |
MAX_UPDATES_PER_HOUR # |
MAX_CONNECTIONS_PER_HOUR #]]
REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
FROM user_name [, user_name ...]
REVOKE ALL PRIVILEGES,GRANT FROM user_name [, user_name ...]
تابع Pssword هم کار encrypt داده ها را انجام میده.
ساختن Setup
مای سکوئل خودش یک ست آپ داره اما اگه راضیتون نمیکنه من قبلا توضیح دادم چه فایلهایی باید رجیستر بشه قسمت اول بود.
برای ODBC اون هم ست آپ هست ولی من تا حالا نتونستم Setup اون را بفهمم چی میکنه. البته میدونم که یکسری Dll را نصب میکنه و روی فایل
یه چیز دیگه اینه که شما برای اینکه برنامه تون توی یک کامپیوتر دیگه درست کار کنه تنظیماتی که در فاکس هنگام ساخت Connection انجام میدهید را نیز در فایل ODBC.ini در شاخه ویندوز فایل مقصد هم اعمال کنید البته با برنامه نویسی که کاربر متوجه نشه. (بد نیست یه نگاهی هم با این فایل بیاندازید.)
binyaz2003
دوشنبه 26 بهمن 1383, 09:29 صبح
تشکر :flower: :تشویق:
rezaTavak
شنبه 10 اردیبهشت 1384, 10:13 صبح
سلام
یک برنامه گرافیکی برای کار با MySQL. جالبه!
MySQL Query browser
http://dev.mysql.com/doc/query-browser/en/index.html
rezaTavak
شنبه 02 مهر 1384, 15:45 عصر
سلام
یه چیز مهم را یادم رفته بگم:
فاکس پرو برای بروز رسانی جداول خودش شماره رکورد داره اما برای بروز رسانی Cursor باید از یک فیلد که در دیتابیس منحصر به فرد باشد استفاده کنه بهتر شما از یک فیلد که شاخص کاندیدیت داره استفاده کنید
binyaz2003
شنبه 16 مهر 1384, 22:24 عصر
در SQL SERVER هم همینطوره؟
خیلی وقت ها خودم و می کشم تا از این طریق آپدیت کنم اما TABLEUPDATE فالس بر می گردونه منم مستقیم از دستورات اسکیوال استفاده می کنم!
rezaTavak
یک شنبه 17 مهر 1384, 09:23 صبح
سلام
مسلما SQL-92 یا ... استاندارد است و برای ارتباط تمام نرم افزارهای تحت این استانداردها مشابه عمل میکنند.
rezaTavak
شنبه 13 مرداد 1386, 09:02 صبح
چند نکته:
(در لینوکس امتحان کرده ام.)
میدانید فایل my.cnf برای تنظیمات است. یک خط دارد:
bind-address = 127.0.0.1
این خط اجازه می دهد فقط از این IP شما به mysql ارتباط داشته باشید.
تذکر: در فایلهای config یک # در ابتدای خط معنی comment یا توضیح می دهد. پس تمام خطوطی که می خواهید غیر فعال کنید را با این گزینه غیر فعال کنید.
نکته دوم:
البته شاید اساتید بزرگ بدانند اما برای تست اینکه یک پورت روی یک آدرس کار میکند:
telnet host port
باید جواب بگیرید. مثلا برای تست اینکه یک سایت http دارد:
telnet yahoo.com 80
اما برای تست mysql از پورت استاندارد 3306 استفاده کنید. (ممکن است شما آنرا در فایل my.cnf تغییر داده باشید: port = 3306 )
اگر ماشین لینوکس دارید با netstat -nl | grep mysql می توانید تست کنید ماشین شما در حال گوش کردن به mysql است؟
نکته سوم:
GRANT ALL PRIVILEGES ON *.* TO 'reza'@'srv4'
IDENTIFIED BY 'pass' WITH GRANT OPTION;
دستور بالا برای ساختن یک کاربر است با نام reza که از srv4 می تواند به mysql متصل شود و رمز آن pass است. خب حالا برای اینکه بتواند از همه جا وارد شود به جای srv4 باید % بگذارید. خالی گذاشتن رمز هم رمز را از بین خواهد برد.
یکسری از تنظیمات در my.cnf انجام می شود مثلااینکه از چه پورتی وارد شوید یابافر های چه میزان باشند.
اما یک چیز جالب این است که یک گزینه دارد:
bind-address
که می توانید بگویید چه IP هایی اجازه دسترسی دارند.
mehran_337
شنبه 11 خرداد 1387, 12:16 عصر
در مورد اتصال به دیتابیس mysql در سایت خودم چه مراحلی را باید طی کنم ؟
rezaTavak
شنبه 11 خرداد 1387, 12:41 عصر
اگر از راه دور است ابتدا باید مجوز لازم را داشته باشید. یعنی در MySQL :
GRANT ALL PRIVILEGES ON *.* TO 'reza'@'%'
IDENTIFIED BY 'pass' WITH GRANT OPTION;
سپس در فاکس در مسیر دیتابیس آدرس سرور قرار می گیرد:
a = SQLSTRINGCONNECT("DSN=Test;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=test;SERVER=srv.com;UID=;PASSWORD=;PO RT=3306;OPTION=3;STMT=;",.T.)
به جای srv.com آدرس سایت را قرار دهید یا IP قرار دهید.
mehran_337
شنبه 11 خرداد 1387, 13:03 عصر
متوجه مورد اول نشدم که باید چکار کنم.
اما در مورد مورد د وم هم پیغام می ده :
connection handle is invalid
rezaTavak
یک شنبه 12 خرداد 1387, 07:09 صبح
در mySQL باید اجازه داشته باشید که به آن وصل شوید. این دستور شما را به عنوان یک کاربر برای mySQL تعریف میکند که اجازه همه کاری دارید: on و نام کاربر شما: reza و کامپیوتری که از آن متصل خواهید شد: ٪ برای هر کامپیوتری pass رمز شما.
دستور دوم را بهتر است اول بطریق ویژوال انجام دهید تا راحتتر باشید. اما این یک مثال است و ممکن است برای شما طوری دیگر باشد. هر پارامتر را بسته به شرایط تعریف کنید.
mehran_337
یک شنبه 12 خرداد 1387, 09:52 صبح
من از طریق سایتم به دیتابیسم متصل می شوم . پس کاربری استفاده می کنم معتبر می باشد.
آیا دستور grant all ... یک دستور است ؟ کجا باید بنویسم ؟
در مورد اینکه از طریق ویژوال ، در بخشی از من مسیر می خواهد و من چگونه مسیر ftp را بدهم.؟؟
آقا رضا اگر می شه واضح تر بگید من کاملا گیج شدم.
نکته : من روی سیستمم فقط wamp نصب کردم . آیا بازهم نیاز به چیز دیگریست؟؟ به دلیل اینکه من درایور مای اسکیوال را ندارم . ممکنه از این باشه؟
در ویژوال هم odbc my sql ندیدم . لینک آن را از طریق همین تاپیک در صفحه اول زدم اما نتونستم پیدا کنم . لینک مستقیمی دارید؟؟
با تشکر
rezaTavak
یک شنبه 12 خرداد 1387, 10:23 صبح
اولا برای هر ارتباطی خارج از فاکس پرو باید ODBC آن در سیستم شما نصب باشد ثانیا اون مقاله مال قبل از خرید mysql توسط سان است و به الطبع سان با ایرانیها مشکل دارد و اجازه دانلود نمیدهد.
http://dev.mysql.com/downloads/connector/odbc/5.1.html
این مسیر دانلود است.
مسیر ftp نیست. یعنی فقط اسم سایت است ftp خودش پروتکلی است که از پورت ۲۱ استفاده میکند و mysql به طور پیش فرض 3306 پورت پیش فرض است ftp ربطی به mysql ندارد. یعنی شما از طریق پورت به دیتابیسها دسترسی دارید و آدرس سایت نباید شامل پروتکل باشد مثلا yahoo.com باشد نه بیشتر.
wamp یعنی Windows,Apache,MySQL,Php که خود php میتواند بدون ODBC و مستقیم به mySQL وصل شود پس نیازی به ODBC ندارد. اما فاکس بدون ODBC نمیتواند وصل شود. آپاچی هم برای بالا آوردن php است و html که در واقع مانند IIS ویندوز است.
mehran_337
یک شنبه 12 خرداد 1387, 10:40 صبح
واسه دانلود این پیغامو می ده
Access Denied
Our export control systems have identified your request for access as non-compliant to the United States export control laws.
A required IP lookup revealed that your IP address is originating from an embargoed country. Therefore, we are unable to grant you access from your current IP location.
آقا رضا ! چکار باید انجام بدم تا بتونم odbc دانلود کنم؟
پس الان مشکل من فقط این است که درایور ندارم؟
و در مورد grant all چیزی نفرمودید..
rezaTavak
یک شنبه 12 خرداد 1387, 13:15 عصر
بله باید درایور را داشته باشید.
در مورد grant هم قبلا گفتم :
در mySQL باید اجازه داشته باشید که به آن وصل شوید. این دستور شما را به عنوان یک کاربر برای mySQL تعریف میکند که اجازه همه کاری دارید: on و نام کاربر شما: reza و کامپیوتری که از آن متصل خواهید شد: ٪ برای هر کامپیوتری pass رمز شما.
mehran_337
یک شنبه 12 خرداد 1387, 15:37 عصر
odbc را چطور دانلود کنم؟
دستور فوق را در خود myadmin سایتم بنویسم؟
rezaTavak
دوشنبه 13 خرداد 1387, 07:58 صبح
یک فایل اجرایی mysql.exe است با اجرای آن میتوانید دستورات را به mysql بدهید.
ODBC :
ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MyODBC3/
برای ویندوز را دانلود کن.
mehran_337
دوشنبه 13 خرداد 1387, 09:14 صبح
با تشکر از جناب توکل !
از طریق odbc که شما زحمت کشیدید یک کانکشن ایجاد کردم اما ناموفق بود . یعنی نتوانستم لوگین کنم. sql-eror
1 - user همان یوزر و پس دیتابیسم هست دیگه درسته؟
2 - سرور هم : afr.ac.ir کفایت می کنه؟
3 - آیا در قسمت port option باید چیزی تکمیل کنم؟
4 - چنانچه با رعایت کردن موارد فوق نتوانستیم متصل شویم اجازه اتصال نداریم؟
5 - در cpanel سایتم remote mysql دارم و بصورت ویژوال نوشته add host کنید . آیا از این گزینه برای اجازه اتصال باید استفاده کنم ؟ اگر اینطوره پس چطوری در بخش هاست بهش بفهمونم که کامپیوتر شخصیم و می خوام متصل کنم؟
6 - اگر بجای مورد 5 باید از همون grant شما استفاده کنم من که در سایتم فایل اجرایی ندارم فرمودید در mysql.exe . پس کجا باید این دستور را بنویسم در phpmyadmin????
kia1349
دوشنبه 13 خرداد 1387, 14:54 عصر
جديدا يه کتاب در مورد فاکس و ماي اسکيوال منتشر شده ولي تا حالا متاسفانه نتونستيم پيداش کنيم
rezamim
دوشنبه 13 خرداد 1387, 16:42 عصر
به فارسي هست؟
binyaz2003
دوشنبه 13 خرداد 1387, 18:40 عصر
به فارسي هست؟
نه انگليسي هست : http://www.hentzenwerke.com/catalog/mysqlvfp.htm
در مورد اتصال به بانک هم اينکه سرورهاي لينوکس بطور پيش فرض اجازه اتصال راه دور رو نميدهند.بايد با مدير هاست تون تماس بگيريد و بخواهيد که براي سايت شما اجازه بده البته هزينه اضافه دارد.
اما در مورد بانک sql server وبسايت روي وب يعني هاست ويندوز مشکلي نداره و با آدرس سايت يا IP اون بعنوان سرور و نام کاربري و اسم رمز ميتونيد متصب بشيد
rezaTavak
دوشنبه 13 خرداد 1387, 19:25 عصر
قابل توجه مهران عزیز:
۱ - دیتابیس یورز و پسورد ندارد خود mysql کاربر دارد که البته میشه مشخص کرد چه دیتابیسی وصل بشه. بهتره اول روی کامپیوتر محلی امتحان کنید بعد راه دور.
۲ - بله کفایت میکند.
۳ - پورت استاندارد 3306 است اما میتواند عوض شود که این بستگی به کسی دارد که آنرا نصب کرده است. توی فایل /etc/my.cnf این پورت تعریف میشود.
۴ - شاید فقط اجازه داده شده که کامپیوتر محلی اتصال یابد چون php روی همان سرور است. باید از admin بپرسید. ولی معمولا در موردی که شما عرض کردید محلی است.
۵ - برای اینکه بفهمانید هر کامپیوتری اجازه ورود دارد % به جای نام یا آدرس IP بگذارید. البته درمورد cpanel نمیدونم. http://www.cpanel.net/support/docs/11/cpanel/databases_remote_sql.html
۶ - این فایل اجرایی در wamp هست و میشه از راه دور یک MYSQL را کنترل کرد:
mysql --host=afr.ac.ir --user=reza --pasword=pass
البته دقت کنید ممکن است dns شما afr.ac.ir درست نباشد و مثلا شما از جایی فضا خریده باشید بهتر است آن ذکر شود یا IP ذکر شود که دقیقتر است.
توصیه:اول توی سرور محلی انجام دهید سپس راه دور.
در لینوکس دو فایل وجود دارد /etc/host.deny و /etc/host.allow که در آنها باید IP که وصل میشود را به آن بدهید. یا آنها را حذف کنید تا کل کامپیوترها به کامپیوتر دسترسی داشته باشند برای همین این که اجازه راه دور یا تعریف شدنی است یا باید admin این دو را حذف کند که منطقی نیست. در ویندوز هم با رجیستری این کار انجام میشود.
rezaTavak
پنج شنبه 16 خرداد 1387, 08:03 صبح
با telnet afr.ac.ir 3306 امتحان کردم نگارش ۵.۰.۲۴ جواب داد نشون میده که مشکلی نیست فقط باید کاربر اون باشید.
mehran_337
دوشنبه 27 خرداد 1387, 08:07 صبح
با تشکر از جناب توکل عزیز !
با ادمین تماس گرفتم متاسفانه اجازه دسترسی وجود ندارد .
می تونم بجای اینکه از فاکس آپدیت کنم تو سایت از سایت فایلهای خروجی فاکس و بگیرم فعلا این تنها راه حله.
اما یه مسئله دیگه .
برنامه های بزرگی هم دیدم که در هنگام نصب sql و یا ابزارهای نظیرشون و خودشون نصب می کنن.
مثلا با مراحل نصب کاملا فارسی یه پنجره waiting میاد که در حال نصب پایگاه داده اسکیوال ...
و بدون اینکه کاربر زحمتی بکشه این کار انجام می شه.
و یا اینکه شما اکثر توصیه به استفاده از اسکیوال و یا مای اسکیوال ، آیا باید برای نصب هر برنامه خودمان اقدام کنیم؟ برنامه های کلان را چه کنیم؟
rezaTavak
دوشنبه 27 خرداد 1387, 11:04 صبح
من فقط در مورد MySql کار میکنم و بقیه را اطلاع ندارم اما راجع به اینکه چطوری بدو نصب MySQL استفاده بشه قبلا توی همین تاپیک توضیح داده ام. فقط کافیه فایلها کپی شوند و mysqld اجرا بشود.
پس در این مورد میبینید مشکلی نیست.
در خصوص نصب برنامه باید خودتان برنامه نصب داشته باشید من یکی با فاکس نوشته ام که نیازهایم را بر آورده میکند.
mehran_337
دوشنبه 02 شهریور 1388, 12:42 عصر
بانک اطلاعاتی برنامه ام را می خواهم به mysql تبدیل کنم . فیلد memo را به longtext یا longblob تبدیل کردم .
1 - آیا این معادل سازی درست است ؟
در این فیلد مقدار textRtf یک شی richtext ذخیره می شود . درفیلد memo جدول dbf هیچ مشکلی نداشتم . اما در فاکس با mysql با اجرای insert دستور sqlexec پیغام طولانی بودن متن می دهد و اینکه چون متن بیش از حد بزرگ است مناسب ثبت نیست و ثبت نمی گردد.
2 - راه حل چیست ؟
arashkhaan2002
سه شنبه 03 شهریور 1388, 03:48 صبح
مهران جان شما هم آخر مجبور به این کار شدی ؟ منم میخوام ولی نتونستم نه خود Mysql نه odbc شو از جائی دانلود کنم اگه داری به من هم بده لطفا .
rezaTavak
سه شنبه 03 شهریور 1388, 11:59 صبح
text که معلوم است اما blob یعنی
Binary large object (http://en.wikipedia.org/wiki/Binary_large_object)
یعنی برای عکس و فیلم و موزیک و... استفاده میشود.
http://dev.mysql.com/doc/refman/5.0/en/blob.html
حال بگویید از blob استفاده کرده اید یا text؟
mehran_337
سه شنبه 03 شهریور 1388, 13:58 عصر
جناب توکل عزیز
ممنون از اینکه وقت گذاشتید . اول از largtext استفاده کردم بعد دیدم پیغام داد متن طولانیه گفتم از blob استفاده کنم . اما باز مشکل همون بود
البته با سعی و خطا متوجه موضوعی شدم و اون اینکه اشکال از خود فاکسه .
یعنی وقتی دستور زیر را اجرا می کنیم
RTFtext = thisform.richtext.textrtf
sqlexec(myconection,'insert into mytable (myfield) values '+RTFtext)
در این بخش مشکل پیش میاد . من فکر می کنم در این زمان که متن rtf باید درون متغیری قرار گیرد یا مثلا زمانیکه قراره رشته فوق + مقدار طولانی RTFtext شود فاکس نمی تواند این مقدار را جهت ارسال به دیتابیس در جایی نگه دارد
البته اینها فرضیاته خودمه . نوشتم که شاید به حل مسئله کمک کنه
rezaTavak
پنج شنبه 05 شهریور 1388, 10:57 صبح
سلام
خواهش میکنم.
یک فایل را با دستورات زیر انتقال دهید و ببینید با هم مشکل دارد؟
sqlexec(myconection,'insert into mytable (myfield) values '+StrToHex(FILETOSTR(MyBinaryFile)))یا ببینید این دستور هم مشکل دارد؟ قبل از آن باید مثلا فیلدی داشته باشید که بر اساس آن ست شود مثلا در اینجا فیلد recno وجود داشته و برای اولین رکورد یک است.
? SQLEXEC(myconection, "UPDATE MyTable SET ImageField = " + StrToHex(FILETOSTR(MyBinaryFile)) + " WHERE recno=1"
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.