วันอาทิตย์ที่ 28 พฤศจิกายน พ.ศ. 2553

วิธีการ compile ภาษา C บน GCC ให้ใช้ Module ของ MySQL ได้

โค้ดนี้นะครับ

#include <mysql.h>
#include <stdio.h>

main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;

   char *server = "localhost";
   char *user = "root";
   char *password = "mysqlpass"; /* set me first */
   char *database = "mysql";

   conn = mysql_init(NULL);

   /* Connect to database */
   if (!mysql_real_connect(conn, server,
         user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   /* send SQL query */
   if (mysql_query(conn, "show tables")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   res = mysql_use_result(conn);

   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);

   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);
}


ถ้าคอมไพล์ไปตรงๆเกิด Error ชัวร์ จะขึ้นประมาณนี้

mysql.c:1:19: error: mysql.h: No such file or directory
mysql.c: In function ‘main’:
mysql.c:5: error: ‘MYSQL’ undeclared (first use in this function)
mysql.c:5: error: (Each undeclared identifier is reported only once
mysql.c:5: error: for each function it appears in.)
mysql.c:5: error: ‘conn’ undeclared (first use in this function)
mysql.c:6: error: ‘MYSQL_RES’ undeclared (first use in this function)
mysql.c:6: error: ‘res’ undeclared (first use in this function)
mysql.c:7: error: ‘MYSQL_ROW’ undeclared (first use in this function)
mysql.c:7: error: expected ‘;’ before ‘row’
mysql.c:20: warning: incompatible implicit declaration of built-in function ‘exit’
mysql.c:26: warning: incompatible implicit declaration of built-in function ‘exit’
mysql.c:33: error: ‘row’ undeclared (first use in this function)


แน่นอนว่า ไม่มี libmysqlclient15-dev ครับ ให้ install เสีย

sudo apt-get install libmysqlclient15-dev

 แล้วจัดการคอมไพล์

$ gcc -o learn  -L/usr/lib/mysql -lmysqlclient learn.c

จบข่าว 

How to use gambas2 connect to database (MySQL)

โปรแกรมกุ้ง หรือ Gambas ผมเคยเขียนหนังสือสอนแจกมาอยู่พักหนึ่งครับ แต่ยังไม่มีโอกาสทำให้สำเร็จ ตรวจทาน และทำจริงๆจังๆเสียที ก็เอาบทความไปอ่านเล่นๆกันก่อน

Gambas ใช้ภาษา Basic ครับ ง่ายๆ ซึ่งก็ง่ายสมชื่อ มีวิธี connect กับ database ได้ง่ายๆดังนี้

1. อันดับแรกต้องติดตั้งโปรแกรมจัดการฐานข้อมูล DBMS ที่ชื่อว่า MySQL ก่อนนะครับ

2. เปิดโปรแกรม GAMBAS ขึ้นมา คลิก New Project และเลือก Option ตามภาพเลยครับ


อย่าลืมติ๊กถูกที่ Database Access ขั้นตอนต่อไปก็ คลิก Next ตั้งชื่อ Project ซึ่งไม่มีอะไร

3. จากนั้นทางด้านซ้ายมือนะครับ จะมีโฟลเดอร์ชื่อ Modules ให้คลิกขวาเลือก New > Module
แล้วตั้งชื่อว่า MODMain.module นะครับ

4.สำหรับ มือใหม่ให้ลองสร้างฐานข้อมูลอะไรขึ้นมาก็ได้ หากยังไม่ได้สร้างผมก็ขอแนะนำสำหรับมือใหม่ให้เปิด ( มือฉมังก็ข้ามไปได้เลยนะครับ )
Terminal ขึ้นมาพิมพ์

4.1mysql -u [ชื่อผู้ใช้งาน] -p กด Enter
จากนั้นจะมีรหัสผ่านให้ใส่ก็ใส่รหัสผ่านลงไป

4.2จากนั้นพิมพ์ show databases; จะปรากฏรายชื่อฐานข้อมูลขึ้นมา จากนั้นก็ให้สร้างฐานข้อมูลใดๆ
ที่ชื่อไม่ซ้ำกับฐานข้อมูลที่มีอยู่ ในที่นี้ผมใช้ green_forum

4.3 พิมพ์ create database green_forum; กด Enter เพื่อสร้างฐานข้อมูล

4.4 จากนั้นพิมพ์ use green_forum; เพื่อเลือกใช้ฐานข้อมูล

4.5 พิมพ์ create table green_members(int unsigned not null auto_increment primary key,username char(50)); กด Enter เพื่อสร้างตารางข้อมูลครับ
(จริงๆคำสั่งแบบนี้สร้างฐานข้อมูลไม่ดี ควรกำหนด charset แต่ในที่นี้ละไว้เพื่อการศึกษาเท่านั้นครับ

4.6จากนั้นให้ลองแทรกข้อมูลใดๆลงไปในตารางโดยพิมพ์
 insert into green_members values(null,'touchdeep'); แล้วกด Enter ครับ

ก็เป็นอันเรียบร้อย ทีนี้เราก็จะมีฐานข้อมูล + ตาราง พร้อมข้อมูลไว้ทดสอบ

5.จากนั้นพิมพ์โค้ดต่างๆลงไปใน MODMain.module  ดังนี้ครับ

Code: [Select]
PUBLIC $Con AS NEW Connection
PUBLIC PROCEDURE Connect()
                $Con.Close()              ' ปิดการเชื่อมต่อฐานข้อมูลใดๆที่ค้างไว้
                $Con.Type = "MySQL"       ' ชนิดฐานข้อมูล ในที่นี้ใช้ MySQL
                $Con.Host = "localhost"   ' ชื่อของเซิร์ฟเวอร์ หากใช้เครื่องตัวเองพิมพ์ localhost
                $Con.Login = "touchdeep"       'ชื่อผู้ใช้ฐานข้อมู
                $Con.Password = "Aib12Ioja" ' รหัสผ่าน
                $Con.Port = "3306"        ' พอร์ตที่ใช้ในการเชื่อมต่อ พอร์ตค่าดั้งเดิมคือ 3306
                $Con.Name = "green_forum"      ' ชื่อฐานข้อมูล ในที่นี้ผมใช้ green_forum
                $Con.Open()               ' เปิดการเชื่อมต่อฐานข้อมูล
END
PUBLIC SUB Main()
                Connect() ' รันโพรซีเยอร์ชื่อ Connect ครับ
                FMain.Visible = TRUE ' ให้ค่าตรรกศาสตร์ของฟอร์มชื่อ FMain ใน Properties ค่าเป็นจริง ( สามารถมองเห็นได้ )
END

6.เมื่อสร้างเสร็จแล้ว ด้านซ้ายมือให้คลิกขวาที่ไฟล์ MODMain เลือก Startup Class ครับ



7.จากนั้น ดับเบิ้ลคลิกที่ FMain เพื่อสร้างฟอร์มทดสอบมาครับ
ในที่นี้ผมใช้ Button นะครับ ท่านก็กำหนดคุณสมบัติตามใจชอบ ไม่ต้องเอาตามผมก็ได้ครับ



จากนั้น ดับเบิ้ลคลิกที่ Button ที่สร้างมา ใส่โค้ดนี้ลงไปครับ

Code: [Select]
DIM $result AS Result
DIM $UserLists AS String
$result = MODMain.$Con.Exec("select * from green_members;")
$UserLists = $result!username
Message.Info($UserLists)

8.จากนั้นลองรันทดสอบดู ปรากฎว่าผ่านครับ

จากที่ตกลงกันไว้ข้อ 4 ข้อมูลที่อยู่ในฟิลด์ username ก็คือ touchdeep นะครับ
โปรแกรมก็ดึงค่าออกมาได้ถูกต้อง



( ตอนแคปเจอร์ เม้าส์ดันไปบังภาพซะ แต่สาบานได้ว่าเขียนว่า touchdeep อิอิ )


บทความการเชื่อมต่อฐานข้อมูลก็ประมาณนี้ครับ

ผมคงต้องยกเครดิตบทความให้พี่ๆบอร์ดนี้ที่เคยสอนผม

และเว็บนี้ครับ http://gambasdoc.org/help/howto/database

ที่เหลือการต่อยอดโปรเจคก็ นำไปต่อเอาเองนะครับ เช่นทำโปรแกรมบัญชี โปรแกรมสมุดโทรศัพท์
โปรแกรม บลาๆๆๆ ฯลฯ

หากบทความผิดพลาดประการใด กราบขออภัยอย่างสูง มาไว้ ณ โอกาสนี้ด้วยครับ

Presentฃ by touchdeep

How to remove apache2 completly

เมื่อปีที่แล้วผมเขียนบทความการลง apache คราวนี้เรื่องการลบบ้างครับ

ปัญหาที่ผมเคยเจอคือ ลบแล้วแพ็คเกจไม่หมด ลงใหม่ก็ลงไม่ได้

เรียกว่า เก่าก็ไม่ไป ใหม่ก็ไม่มา

กรณีที่เป็น server นะครับ

ส่วน Desktop ง่ายๆเลยก็ synaptic package สำหรับ Desktop ไม่มีอะไรยาก ผมขออนุญาต
ไม่พิมพ์นะครับ (ขี้เกียจ)

หวังว่าคงเป็นประโยชน์ครับ

 ทำตามดังนี้ครับ

พิมพ์คำสั่ง sudo dpkg --get-selections | grep apache

จะปรากฎแพ็คเกจที่ติดตั้งที่เป็น apache ขึ้นมาครับ เช่น

apache2                  install
apache2-doc               install
apache2-mpm-prefork            install
apache2-utils               install
apache2.2-common            install
libapache2-mod-auth-mysql         install
libapache2-mod-php5            install

จากนั้นพิมพ์คำสั่งนี้เพื่อลบให้สิ้นกลิ่นน้ำนมเลยครับ

 sudo apt-get remove apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-auth-mysql libapache2-mod-php5

ถ้ารายชื่อแพ็คเกจคุณมีมากกว่านั้น ก็ใส่ไปมากกว่านั้นครับ
เห็นคำสั่งยาวอย่างง ก็คือ sudo apt-get remove ตามด้วยแพ็คเกจที่เจอครับ

เมื่อกด Enter จะเจอ warning ดังนี้

Reading package lists... Done
Building dependency tree     
Reading state information... Done
The following packages were automatically installed and are no longer required:
  ttf-wqy-zenhei ttf-kannada-fonts libaccess-bridge-java libmcrypt4 libt1-5 ttf-telugu-fonts rhino ttf-oriya-fonts dbconfig-common ttf-bengali-fonts
  php5-common
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-common jetty libapache2-mod-auth-mysql libapache2-mod-php5 php5 php5-curl php5-gd
  php5-mcrypt php5-mysql phpmyadmin
0 upgraded, 0 newly installed, 14 to remove and 1 not upgraded.
After this operation, 39.1MB disk space will be freed.
Do you want to continue [Y/n]? y

เครื่องแค่ถามว่าเราจะลบหรือไม่ ก็พิมพ์ y แล้วกด Enter

--------

ถ้าเคยลงไว้ ระบบจะถามว่า

Configuring phpmyadmin
-------------- 
  Since you are removing phpmyadmin, it's possible that you no longer want the underlying database.
    If you like, database removal can be handled with dbconfig-common.                                                                                 
If you know that you do want to keep this database, or if you want to handle the removal of this database manually, you should refuse this option. 

 Otherwise, you should choose this option.                                                                                                                                                                                                                                                               
Deconfigure database for phpmyadmin with dbconfig-common?                                                                                                                                       <Yes>                                                <No> 

ก็ให้ตอบ no ไปครับ

จากนั้นก็ติดตั้งใหม่ครับ

sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 libapache2-mod-auth-mysql



ถ้าสำเร็จ บรรทัดท้ายๆต้องเจอคำว่า

Setting up apache2-mpm-prefork (2.2.11-2ubuntu2.7) ...
 * Starting web server apache2                                                                                                                              apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                                                                                                                     [ OK ]

Setting up apache2 (2.2.11-2ubuntu2.7) ...
Setting up apache2-doc (2.2.11-2ubuntu2.7) ...
 * Reloading web server config apache2                                                                                                                      apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                                                                                                                     [ OK ]

Setting up libapache2-mod-auth-mysql (4.3.9-11) ...
Setting up libapache2-mod-php5 (5.2.6.dfsg.1-3ubuntu4.6) ...

เสร็จแล้วอย่าลืม Add lines นี้ลงไปที่ไฟล์บรรทัดท้ายสุด

พิมพ์ sudo nano /etc/apache2/apache2.conf

LoadModule php5_module  modules/libphp5.so
AddHandler php5-script php

แล้ว Save โดยกด Ctrl+O ,แล้วกด Enter ออกจากโปรแกรมโดยกด Ctrl+X

restart service โดย /etc/init.d/apache2 restart

ขอขอบคุณที่มาจาก
http://dan.drydog.com/apache2php.html

http://dancingpenguinsoflight.com/2009/02/how-to-completely-reset-an-apache-instance-in-ubuntu/

Google cloud connect

ส่วนตัวผมชอบกูเกิ้ล และกูเกิ้ลแอพ ฯลฯ อยู่แล้ว วันนี้เปิดอ่านเว็บเจอ Google sync กับ Microsoft office เหตุผลที่ผมยังใช้วินโดวส์อยู่คงเพราะข้อนี้ แต่ไม่ช้า Go-oo กับ openoffice เชื่อว่าก็คง support ด้วยเช่นกัน

เชิญทัศนาบทความเต็มๆได้ที่นี่
http://www.readwriteweb.com/archives/offisync_microsoft_office_plus_google_docs_is_the_perfect_app.php

ส่วนนี่คือวีดีโอครับ 

http://www.youtube.com/watch?v=ubUFl0wPaeM&feature=player_embedded