佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1715|回复: 6

做assignment遇到问题~求助 VB.NET

[复制链接]
发表于 26-10-2014 05:13 AM | 显示全部楼层 |阅读模式
你们好,我的final project需要做一个tuition centre mangement system 小学大概就可以create student, teacher, subject information的system.
然后目前遇到的问题就是第一张照片选择了Standard,
然后按Next button,就会在2 show出 standard 1 有什么subject可以选择,
选择后就去 confirm那边,按了done就会save去我的access,
我的access开了3个table,Student Information, Subject, StudentTakeSubject
Student Information table 里面就是save学生填的资料
Subject table里面就是save subject的资料,就是第二张照片的资料(这个由administrator去create new subject)
StudentTakeSubject table 里面会有StudentTakeSubject_ID(auto number),Student_ID,Subject_ID (这里我就可以知道学生拿了什么subject)
现在的问题是hor,我不知道要如何save Student_ID 和Subject_ID进去
StudentTakeSubject table里面,
如果我在第2个step只写出Subject Name,那我在sql那边还可以写
For x = 0 To checklistbox.CheckedItems.Count - 1
s = checklistbox.CheckedItems(x)
sql = "SELECT * FROM Subject WHERE Subject_Name='" & s & "'"
con.Open()
cmd = New OleDb.OleDbCommand(sql, con)
r = cmd.ExecuteReader()
blabalbla
但我要写subject的资料包括时间,价钱,所以上面地方的不能用,因为s那边会有其他的资料如时间等,会读不到,请帮帮我,如果我的一开始的概念就错了的话,麻烦纠正我,谢谢。






本帖最后由 不要 于 26-10-2014 05:18 AM 编辑

1.png
2.png
3.png
回复

使用道具 举报


ADVERTISEMENT

发表于 26-10-2014 10:41 AM | 显示全部楼层
你blabalbla那边的code,好像有问题。 给看完整的source code。 blabalbla
回复

使用道具 举报

 楼主| 发表于 26-10-2014 02:44 PM | 显示全部楼层
hanching 发表于 26-10-2014 10:41 AM
你blabalbla那边的code,好像有问题。 给看完整的source code。 blabalbla

不好意思~
我现在这个coding我觉得很有问题,
按了Done button 他会一直insert 进去access non stop
帮我看看 谢谢!



回复

使用道具 举报

发表于 26-10-2014 05:26 PM | 显示全部楼层
上面的: OleDbCommand你需要release了, 才可以execute过。
下面的:connection开了2次就是问题了和reader也有问题。

debug中学习吧。
回复

使用道具 举报

发表于 20-12-2014 11:21 PM | 显示全部楼层
本帖最后由 musicalangel 于 20-12-2014 11:27 PM 编辑

這會有點長, 來個深呼吸 (PS: 我光看你的"問題hor" 就反覆看了N遍阿)

现在的问题是hor,我不知道要如何save Student_ID 和Subject_ID进去

這個問題分3個部分
部分1: Student ID
你原本的code 長這樣

  1. '  obtain id
  2. sql = "select MAX(Student_ID) from Student";
  3. cmd=New OleDbCommand(sql, con);
  4. .
  5. .
  6. .
  7. Return RegisterStudentInformation();
复制代码


這邊有兩個問題, 就是last insert id 的概念, 請參考這個:
get last insert id from access

所以應該改成這樣

  1. ' obtain id
  2. sql="select @@IDENTITY from Student";
复制代码


原因, @@IDENTITY比較像是程式的暫存變數, 你select 他的過程就不需要經過MAX函式的運算, 資料大的時候可以省下很多時間

然後Student ID 應該暫存在廣域變數裡面(也就是不要放在任何function 裡面)
例如:

  1. Public int Student_ID

  2. Private Function RegisterStudentInformation() as Integer
复制代码


RegisterStudentInformation()將近完成的時候, 將select @@IDENTITY 回來的變數存入這個廣域變數, 這樣你在別的function就能取到它的值
(如果你不確定廣域變數怎樣使用的話, 從介面拉一個hidden欄位來做為暫存student_id的變數也可以)

部分2: Subject_ID
這邊我們要討論的東西就很多
1) select 的時候不要用名字做為條件
例如:
  1. sql="select * from subject where subject_name ='" & s &"'";
复制代码


這邊會產生很多問題, 例如如果你有兩個科目類似名稱, 到時候你的select 會產生多個結果,
那個學生本來報名1個馬來文, 可能會變成報名2個科目

在你gererate step2 的時候, checkbox的Text就以ID做開頭
例如:

  1. (1)Subject Name:BM...
  2. (2)Subject Name:BI...
复制代码


然後在Looping整個checkbox的時候, 就用split 來擷取subject的ID
例如:

  1. '先split 第一次, 將ID跟其他資訊分開
  2. s=split(cboxSubject.CheckedItem(i),")");

  3. '在split 第二次, 去掉前掛號
  4. s=split(s(0),"(");

  5. ' 最後剩下的就是ID, 就可以拿來當insert 的值
  6. sql="insert into StudentTakeSubject(Student_ID,Subject_ID) value ('" &Student_ID& "','"& s(1) &"')";
复制代码


部分3:效能改善
有幾點你要注意
1) select 的時候儘量不要使用 *
原因很簡單, 如果你只單單select ID vs select *
它的時間好像是 0.01 s  vs 0.03 s
整體來說會拖垮你的程式應用的流暢度

2) Student Information, Subject 都有Primary Key, 這沒有問題
但StudentTakeSubject是關聯table, 所以裡面的 Student_ID 跟 Subject_ID請建立index, 確保資料scale up的時候不會出現任何緩慢的情形

這邊需要注意一下, 我不會寫VB, 所以我這邊打的純粹是概念, 請不要copy paste
還有, 如果可以的話, 請我一杯Starbuck XD, 我花了2小時來解答

有問題再詢問

共勉之.
回复

使用道具 举报

 楼主| 发表于 22-3-2015 11:38 PM | 显示全部楼层
musicalangel 发表于 20-12-2014 11:21 PM
這會有點長, 來個深呼吸 (PS: 我光看你的"問題hor" 就反覆看了N遍阿)

太感谢你了!有缘请你喝starbucks
回复

使用道具 举报

Follow Us
发表于 3-4-2015 01:12 PM | 显示全部楼层
有没有兴趣请人帮忙?如果想,可以pm我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 15-8-2025 03:46 AM , Processed in 0.143022 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表