Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > จะเขียนโปรแกรมแตกข้อมูลอย่างนี้ยังไงคะ ใช้ sql เขียนได้ป่าวคะ



 

จะเขียนโปรแกรมแตกข้อมูลอย่างนี้ยังไงคะ ใช้ sql เขียนได้ป่าวคะ

 



Topic : 045028

Guest




เนื่องจากฐานข้อมูลได้ถูกสร้างใน access อะคะ แล้วข้อมูลเดิม พนง ที่นี่เค้ากรอกข้อมูลแบบตารางด้านซ้ายอ่ะคะ
แล้วทีนี้จะทำระบบฐานข้อมูลขึ้นมาใหม่แล้วจำเป็นต้องแตกตารางออกแบบตารางด้านขวาอะคะ

ไม่ทราบว่าจะเขียนยังไงดีคะ โดยไม่ต้องมานั่งแยกเองเพราะข้อมูลมัน 5 พันกว่าเรคคอร์ดกันเรยทีเดียว

aaa



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-07-06 11:32:31 By : แพร View : 1039 Reply : 22
 

 

No. 1

Guest


ก๊อบปี้ ภายใน access อะคะ






Date : 2010-07-06 11:34:19 By : แพร
 


 

No. 2



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

คับได้ (ผมไม่เป็น access แต่วิธีการเดียวกัน)

คือสร้างตารางใหม่ ที่ id ไม่ต้องเป็น pri เพราะ มันซ้ำกัน (หรือจะทำเป็นสองตารางแยกก็ได้) รอไว้

เขียนโปรแกรมดึงแรกคอร์ดตารางแรกมา เอา inv มาตรวจโดยตรวจสอบค่า , เพื่อแยกจำนวน inv ต้นไว้ และแต่ละตัวตรวจสอบว่ามี - หรือ ไม่เพื่อ บันทึกลงในตารางใหม่

โดยเอา ค่า หลัง - มาลบค่า ต้นขีด เช่น 459001-10 จะได้ 9

เราก็บันทึกในรารางใหม่ไป 9 เร็คคอร์ด โดย loop บวกค่าต้นไปเรื่อยๆ

ถ้าไม่มีขีด ก็บันทึกค่าเดียว

ถ้ามี , ก็ลูปไปเรื่อยๆจนหมดค่า และ loop ดึงเรคคอร์ดใหม่ไปเรื่อยๆ



http://gunner.freetzi.com
087-577-0276, 054-368-378
Date : 2010-07-06 12:59:05 By : pjgunner
 

 

No. 3

Guest


เขียนในส่วนไหนของ access หรอคะ คิวรี่ ที่ เป้นภาษา sql ใน access เขียนแล้ว run ในนี้ได้เรยปะคะ
Date : 2010-07-06 13:06:22 By : แพร
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ป่าวคับ เขียนโปรแกรมขึ้นมาจัดการ

ผมไม่เคยเขียน access และ sql ของมัน

เพียงแต่ถ้าผมติดต่อมันด้วย php เป็น ก็คงทำได้คับ

คือเขียนโปรแกรมเข้าไปสร้างใหม่อัตโนมัติ
Date : 2010-07-06 13:09:40 By : pjgunner
 


 

No. 5

Guest


*0* โอ้ววว จอร์จจจจ ~><~
Date : 2010-07-06 13:30:33 By : แพร
 


 

No. 6



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


ใน access จะเน้น macro ภายในอะค่ะ ฉนั้น sql statement ของ access
แทบจะเรียกว่า simple เอามากๆ อาจจะด้วยเพราะเป็น file database ด้วยมั้งคะ
มรดกจาก dbf ในยุคสมัยก่อนโน้น

พี่เอียว
Quote:
โดยเอา ค่า หลัง - มาลบค่า ต้นขีด เช่น 459001-10 จะได้ 9

มาน 10 record ดิคะ result = 9 แต่ GAP คือ n+1 เนอะคะ

ไม่ทราบคุณแพรมีพื้นฐานเขียนโปรแกรมมาบ้างป่าวนะคะ
ที่เห็นมีทางเลือกให้ ประมาณนี้
1. Macro access
2. PHP
3. .NET >> VB.NET ,C#
4. ใช้ SQL SERVER หรือจะ MYSQL ก็ได้ IMPORT ข้อมูลจาก ACCESS จากนั้น ใช้ SQL จัดการได้ล้วนๆค่ะ

อ่อนี่ป่าวคะที่เคยถามมาว่าระบบเดิมเป็น ACCESS แล้วจะเปลี่ยนเป็นใช้ฐานข้อมูลอย่างอื่นดีหรือเปล่า
ความเห็นส่วนตัวนะคะ น่าจะเปลี่ยนมาใช้ MSSQL SERVER จะ EXPRESS ก้อได้จะได้ถูกต้องอะค่ะ
และเท่าที่เขียนๆมาคิดว่า SQL ENGINE ของ MSSQL ยืดหยุ่นกว่า ระบบ support ตอนข้อมูลใหญ่ก้อดีกว่าค่ะ
Date : 2010-07-07 04:58:21 By : blurEyes
 


 

No. 7

Guest


เขียนโปรแกรมช่วยแปลงประมาณ 30นาที - 1ชม
Date : 2010-07-07 08:30:53 By : 111
 


 

No. 8



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


Quote:
เขียนโปรแกรมช่วยแปลงประมาณ 30นาที - 1ชม


นั่งเขียน SQL STATEMENT ไม่ถึง 10 นาทีค่ะ
Date : 2010-07-07 09:04:25 By : blurEyes
 


 

No. 9



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

access นี่ มันใช้ VBA ใช่ป่าว เห็นว่ามันเอาไปเขียน โปรแกรมได้ (หรือป่าวหว่า)

Quote:
มาน 10 record ดิคะ result = 9 แต่ GAP คือ n+1 เนอะคะ
ผมไม่ได้หมายถึง 9 เรคคอร์ด แต่หมายถึงว่ามีอีก 9 อันต่อจาก 459001 เด้อ


ตย.
$start = 459001;
$gap = 9;

do{
odbc_exec(//sql insert with $start);

++$start;
--$gap;
}while($gap >= 0);
Date : 2010-07-07 09:55:17 By : pjgunner
 


 

No. 10



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


Quote:
ผมไม่ได้หมายถึง 9 เรคคอร์ด แต่หมายถึงว่ามีอีก 9 อันต่อจาก 459001 เด้อ


บอกไม่หมดเองนี่ มะต้องเลย ( คนลำปางรายมีเด้อ )
Date : 2010-07-07 09:58:36 By : blurEyes
 


 

No. 11



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

555

ป่าว คับ การไปเขียนให้ มันเป็น 10 ตามที่คุณว่า มันไม่ค่อย จะเป็นแนวผมเลยเท่าไหร่ เช่น

ตย.
$gap = 9+1;
$start = 459001;
for($i=0; $i < $gap; $i++){// loop 10 รอบ
odbc_exec(//insert sql with $start+$i);
}

มันก็ดูดีนะ แต่ตรรกะผมไม่ค่อยเขียนแบบนี้เท่าไหร่ เหมือนกับว่า มีการนับจำนวนแถว อยู่ด้วย เพราะไม่ชอบ มาบวกเองเท่าไหร่ อยากให้มันเป็นข้อมูลดิบ 9 ไปเลย เหมือนกับว่า ถ้า บวกไปอีก 1 จำต้องเขียนคอมเมนต์ ^^
Date : 2010-07-07 10:07:01 By : pjgunner
 


 

No. 12



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


Quote:
access นี่ มันใช้ VBA ใช่ป่าว เห็นว่ามันเอาไปเขียน โปรแกรมได้ (หรือป่าวหว่า)


ถ้าเป็น ชุด office ที่ต่ำกว่าหรือเท่ากับ Office 97 ใช้ VBA SCRIPT ค่ะ
แต่สูงกว่านั้น จะมี template ของ .net ให้เขียนลงไปเลย php ทำได้ป่าวๆ พี่เอี่ยว อิอิ
Date : 2010-07-07 10:43:42 By : blurEyes
 


 

No. 13



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ทำได้แหละ แต่ไม่เคยใช้พวก odbc ติดต่อฐานข้อมูลเท่านั้นเอง

แต่ไม่รู้ว่า จขกท. จะเปลี่ยนไปทำไม ตารางนี้อ่ะจ๊ะ
Date : 2010-07-07 10:49:08 By : pjgunner
 


 

No. 14



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


odbc อ่ะ ใส่สูตร ทำตัวหนา ติดกราฟมะด้ายหรอกค่ะ อิอิ

ส่วนพี่แพรมั้งนะคะ น่าจะเป็นพี่เห็นถามๆเรื่องนี้นานละ

จะเปลี่ยนระบบเก่าๆ ให้ทะนสมัยไงคะ

จำมั่งปาวเนี่ยพี่เอี่ยวใครถามอะไรไป ใครตอบไรไป

ยังจำได้เลย พี่เอี่ยวไปโพสกะทู้ปัญหาชีิวิต โอดครวญรัยมะรุ

พอเราไปโพสต่อนะ มีลบกระทู้ออกไปด้วย จำได้มั่งปะคะ
Date : 2010-07-07 10:54:49 By : blurEyes
 


 

No. 15



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

จำไม่ได้อ่ะคับ TT
Date : 2010-07-07 10:59:31 By : pjgunner
 


 

No. 16



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


Quote:
จำไม่ได้อ่ะคับ TT


รุอยู่แล้วว่าคงไม่จำหรอก งี้แล้ (ผู้ชาย)
Date : 2010-07-07 11:12:28 By : blurEyes
 


 

No. 17

Guest


*0*

เราลองเอาแนวคิดคุณเอี่ยวมา เขียนโปรแกรมนะคะ

Code (PHP)
	while($itemrow = odbc_fetch_array($itemresult)){
		$CustomInv = $itemrow["RefCustoms"];
		$ExplodeInv = explode("-", $CustomInv);
		$Inv_Start = trim($ExplodeInv[0]);
		$Inv_End = preg_split('/[\s,]/', trim($ExplodeInv[1]));
		$Inv_End = $Inv_End[0];
		$Length_Inv_End = strlen($Inv_End);
		$Length_Inv_Start = strlen($Inv_Start);
		$Length_Back_Start = $Length_Inv_Start-$Length_Inv_End;
		
		$Inv_Back_Start = SUBSTR($Inv_Start,$Length_Back_Start,$Length_Inv_End);
		//$Inv_To_End = $Inv_End;
		$Diff_InvStar_InvEnd = $Inv_To_End-$Inv_Back_Start;
		echo "<br/>";
		echo '$CustomInv : ' . $CustomInv . "<br/>";
		echo '$Inv_Start : ' . $Inv_Start . "<br/>";
		echo '$Inv_End : ' . $Inv_End . "<br/>";
		echo '$Length_Inv_End : ' . $Length_Inv_End. "<br/>";
		echo '$Length_Inv_Start : ' . $Length_Inv_Start. "<br/>";
		echo '$Length_Back_Start : ' . $Length_Back_Start. "<br/>";
		echo '$Inv_Back_Start : ' . $Inv_Back_Start . "<br/>";
		echo '$Inv_To_End : ' . $Inv_To_End  . "<br/>";
		echo '$Diff_InvStar_InvEnd : ' . $Diff_InvStar_InvEnd  . "<br/>";
		echo "----------------------------------------------------------------<br/>";
		
		
		for($i=$Inv_Back_Start;$i<=$Inv_End;$i++){ // ############# ตรงนี้อะคะ 
		
				/*
				$inv = SUBSTR($Inv_Start,0,$Length_Back_Start).$i;
				$Length_Inv = strlen($inv);
				$Diff_Length_Inv_InvStart = $Length_Inv_Start-$Length_Inv;
				
				$inv = STR_PAD($inv,$Diff_Length_Inv_InvStart,0,STR_PAD_LEFT);
				*/	
				echo $i;
		}	
	
		}


ตรง for อะคะ มันเหมือน run ช้ามากเลย จนค้างไปเลยคะเว็บบราวเซ่อนั่น
Date : 2010-07-07 12:55:22 By : แพร
 


 

No. 18

Guest


ตัวอย่างผลการรันนะคะ ถ้าไม่มี for นะคะ

$CustomInv : 4794017204-10
$Inv_Start : 4794017204
$Inv_End : 10
$Length_Inv_End : 2
$Length_Inv_Start : 10
$Length_Back_Start : 8
$Inv_Back_Start : 04
$Inv_To_End : 10
$Diff_InvStar_InvEnd : 6

ตรง for อะคะ จะเขียนเพื่อให้

เติม 0 ข้างหน้าอะคะ
อย่างกรณีข้อมูลตัวอย่าง ถ้า รอบแรก +1 ก็จะได้เป็น 479401725 รอบถัดไปบวกอีก 1 จะได้ 4940126 เราจะเติม 0 ข้างหน้าอะคะ ให้เป็น 4794017205 , 4794017206

แต่บางที ก็จะมี เป็นแบบนี้คะ

$CustomInv : 4794017399-403
$Inv_Start : 4794017399
$Inv_End : 403
$Length_Inv_End : 3
$Length_Inv_Start : 10
$Length_Back_Start : 7
$Inv_Back_Start : 399
$Inv_To_End : 403
$Diff_InvStar_InvEnd : 4

ก็เรยต้องมีการคำนวนจำนวนตัวเลขก่อน ว่ามีกี่ตัว จะได้เติม 0 ถูกนะคะ
Date : 2010-07-07 13:05:51 By : แพร
 


 

No. 19

Guest


?????????
Date : 2010-07-07 15:26:56 By : pair
 


 

No. 20



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ผมไม่รู้ว่า ตารางต้นมันมีกี่ฟีลนะ ผมเดาว่า สองฟีลตามรูป แต่อาจมีอีกเพราะเห็น $itemrow["RefCustoms"];

บอกไว้ก่อนนะครับ ถ้ามีหลายเรคคอร์ดมาก ทั้งต้นฉบับ และ ตารางใหม่ ควรเขียนให้อ่านทีละช่วงและใส่ทีละช่วงจะชัวร์กว่า (กลัวเครื่องแฮงค์)

จาก โค้ด No.17 จริงๆ ต้องแยกด้วย , ก่อน - นะครับ

บอกไว้ก่อนผมไม่เคยเขียนพวก odbc แต่อยากลองเขียนมั่วดู ^^ อย่างน้อยก็จะแสดงตรรกะให้ดู

ลักษณะตาราง มีสองฟีล id และ inv และสร้างตารางใหม่รอไว้ แต่ไม่ให้ id เป็น primary หรือ unique
เป้าหมายก็คือ ทำให้ทุก inv แยกแรคคอร์ดกัน

Code (PHP)
// ไม่จำกัดเวลาในการ execute 
set_time_limit(0);

// เพิ่มหน่วยความจำ เพราะเรคคอร์ดเยอะ
ini_set('memory_limit', '150M');

// จำนวนแถวที่ถูก insert
$inserted_row = 0;

while ($row = odbc_fetch_array($itemresult))
{
	$id = $row['id'];

	// invoice ดิบ
	$native_inv = $row['inv'];

	// แยก ด้วย , (จะได้อาเรย์ ออกมา เช่น array('495001-10', '495020'))
	$invs = preg_split('/[,\s]/', $native_inv);

	// จัดการแต่ละ invoice หรือ ช่วง invoice
	foreach ($invs as $val)
	{
		// ตรวจสอบว่า มีช่วง ของ inv โดย หา -
		if (preg_match('/-/' $val) === 1)
		{
			// พบ แสดงว่ามี ช่วงของ inv ให้สร้าง ต้นฉบับ
			
			// ดึงตัวหน้าและตัวหลัง ผมไม่เข้าใจตรงที่ว่าเติม 0 อะไรนะ ไปทำเองแล้วกัน
			list($first, $end) = preg_split('/-/', $val);
			
			// เอา ส่วนหน้าของ $first ไปไว้หน้า ของ ตัว $end เพื่อได้ค่า สุดท้ายมา
			$new_end = (int) substr($first, 0, (strlen($first) - strlen($end))).$end;
			
			$first = (int) $first;

			// บันทึก ข้อมูล
			while ($first <= $new_end)
			{
				odbc_exec($conn, "INSERT INTO new_table VALUES('$id', '$first')");
				++$first;
				++$inserted_row;
			}
		}
		else
		{
			// ไม่พบ - (คือมี อันเดียว) ให้บันทึก
			odbc_exec($conn, "INSERT INTO new_table VALUES('$id', '$val')");
			++$inserted_row;
		}
	}
}

echo $inserted_row, 'rows inserted';


ปล. เอาไปทดสอบเอง หลักการนี้แล
Date : 2010-07-09 20:10:51 By : pjgunner
 


 

No. 21



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


comment ได้อารมมาก

พี่เอี่ยวน่าจะเปิด blog เขียน code ไปบ่นไป ได้เลยนะคะ
Date : 2010-07-09 20:24:29 By : blurEyes
 


 

No. 22



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ปรกติถ้าผมทำเองไม่เมนต์ เยอะขนานี้หรอกคับ คิดว่าแค่สองสามอัน

กลัวเค้าไม่เข้าจายจ๊ะ (วัยรุ่นไปป่าวเนี่ย)
Date : 2010-07-09 20:32:37 By : pjgunner
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : จะเขียนโปรแกรมแตกข้อมูลอย่างนี้ยังไงคะ ใช้ sql เขียนได้ป่าวคะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่