سلام

من در این قسمت می خواهم گام به گام ارتباط بین فاكس و MySql را هر چه  كه تجربه كرده ام به دیگران هم بیاموزم.
  • راه اندازی
  • ساختن دیتابیس
  • ساختن جدول
  • ساختن ایندكس
  • ساختن ویوی راه دور
  • نحوه Backup و Restore
  • ساختن كاربر
  • ساختن Setup

مرحله اول:

MySql را دانلود كنید: http://dev.mysql.com/downloads/

ابزار ODBC آنرا هم از آدرس بالا دریافت كنید. البته MySQL تحت ویندوز  را!

یک برنامه گرافیکی برای کار با MySQL. جالبه!

MySQL Query browser

http://downloads.mysql.com/archives/query/

آدرس زیر یكی از سایتهایی كه ODBC را میتوانید دریافت كنید نشان میدهد

http://dev.mysql.com/downloads/connector/odbc/

خب حالا نرم افزارهای دانلود شده را نصب كنید.


فرض من بر این است كه آنها را در شاخه C:\MySQL نصب كرده اید.

برای تنظیم MySQL بایستی فایل My.ini را در شاخه ویندوزتان تنظیم كنید.
winmysqladmin در ویندوز برای تنظیم بكار میرود.

فایلهای Mysqld و Mysqld-nt برای راه اندازی سرویس مربوطه ضروی هستند.  و Mysql برنامه ارتباطی و محل دستورات است.

همه اینها در شاخه Bin قرار دارند. در شاخه DOCs توضیحات مفصلی در این  باره خواهید یافت. Data معمولا محل نگهداری داده ها است كه در فابل  My.ini تنظیم میشود. libmySQL.dll یكی از فایلهای ضروری است.

تا اینجا شما ابزارهای لازم را نصب كرده اید. حالا  نوبت به كار در 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);

راستی یادم رفت بگم قانون مای با فاكس در تایپ این تفاوت را داره كه  آخر خط فاكس هیچی نیست و اگر ; بود یعنی ادامه در خط بعد اما مای برعكس  هر وقت خواستیم خط را تموم كنیم ; میزنیم و مثل زبان سی یا پاسكال است.

یك موضوع كه مهم است اینه كه اگه جداول شما حجمشون كم باشه بهتر از خود  جداول فاكس استفاده كنید. چونكه سرعت در فاكس بیشتره تا ارتباط با بانك  دیگه. و یك مسئله دیگه اینه كه بعد از ارتباط یك 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 در حالت اجرا باشد.

اما گفتم كه حداقل كاری كه باید در مای سكوئل كنیم تمام شده اما یك  برنامه نویس حرفه ای بایستی با دستورات كار كند و دستوری كه ما نیاز  داریم در آن تمام دستورات مای سكوئل را بدانیم 

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

را بایستی دنبال كنید.یك لیست بلند بالا از تمام توابع.

خب تا اینجا دیگه كافیه بهتر بریم سراغ خود فاكس:
یك پروژه بسازید و در آن:
یك دیتا بیس بسازید و در آن:
در آن یك كانكشن ایجاد كنید. با استفاده از مراحل زیر:
بر روی گزینه Connections كلیك كنید.
دكمه New را فشار دهید تا كانكشن جدید ساخته شود.
هنگامی كه وارد پنجره شدید Connection String را انتخاب و روی ...  روبروی آن كلیك كنید.
پنجره Select Data Source كه ظاهر شد روی صفحه machine data source  كلیك كنید و دكمه New را فشار دهید. Create Data source پدیدار میشود  روی UserData Source كلیك كنید و درایور Odbc مای سكوئل را انتخاب  كنید. و بعد نام دیتابیستان را انتخاب كنید.

خب اگه تا اینجا درست كار كرده باشید بایستی كانكشن درست جواب بده و  Connection Succed نمایش داده بشه. از این پنجره خارج شده و نامی كه  میخواهید را به كانكشنتان بدهید.

خب فقط ساختن View مانده تا دیتا بیس مانند یك جدول فاكس بشود!

ساختن یك ویوی راه دور

منظور از ویوی راه دور ویویی است كه از جداول غیر فاكس پرو و از طریق  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 است.

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

خب دیگر شما براحتی میتوانید در فاكس از مای سكوئل بهره ببرید. و  جذابیت آن را حس كنید! دیگر نگران حجم جداول و سرعت پردازش بانك خود  نباشید. و كار را به مای سكوئل بپردازید. البته با تدبیر و دور اندیشی.
این یك مثال با كد:

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)

نحوه 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=;PASSWORD  =;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 در شاخه ویندوز فایل مقصد هم اعمال كنید البته  با برنامه نویسی كه كاربر متوجه نشه. (بد نیست یه نگاهی هم با این فایل  بیاندازید.)


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

تاریخ گردآوری و انتشار مقاله : 1385/09/17

نویسنده : رضا توکل

گرد آورنده : علی محمدحسین زاده