2011年6月30日 星期四

@CASE 1 <物料需求計算> ver-110702

重新構思一下
SQL部分
用一步一步的方式去連
看效能問題會不會解決
======================================

大致上完成

等待整理資料作成文件 , ppt, visio繪出流程圖
=====================================
防呆 & 功能加強 開始


介面
1.切開條件篩選 與 報表呈現 兩個 Form 是否必要
2.報表 有列印, 轉 excel 功能 ( 是否列印  也會同時作轉 Excel 動作 )
3.報表 有一個 原物料需求表 View, 一個 選配物料需求表 View, 是否有分開呈現的必要
4.防呆
5.中文顯示
待續..
=======================================
mmac -> tblFmmac ( part, mark, trndate, ordno )
1. tblStock -> tblFmmac 結合 OldPartCode ( PartCode, PartRule (mmac.spec)) to tblFmmac
2. tblOrd -> tblFmmac 結合 CustOrderNo = mark+ ordno ( OrderNo ) to tblOrd
3. tblOrdDet -> tblOrd 結合 OrderNo, PdtVersion ( 成品PartCode, Qty ) to tblOrdDet
4. tblBOMPdt -> tblOrdDet 結合 PartCode, Pdtversion ( PdtKey, PdtVersion ) to tblBOMPdt
5. tblBOMProc -> tblBOMPdt 結合 PdtKey, PdtVersion ( ProcKey, PdtKey, PdtVersion, ProcNum使用數 ) to tblBOMProc
6. tblBOMPart -> tblBOMProc 結合 PdtKey, PdtVersion, ProcKey ( PartCode,  PartNum/CardNum使用量)
                    7. -> tblStock 結合 PartCode ( OldPartCode, PartRule, Unit )
=========================================
還是很慢....可能是回圈太多
沒怎麼用JOIN
需要在試試看JOIN
=========================================
1. Order, OderDet, Pdt 撈出所有成品 PartCode, PdtKey, PdtVersion, Qty
SELECT ord.CustOrderNo,ord.OrderNo, orddet.PartCode, pdt.PdtKey, orddet.PdtVersion, orddet.Qty
FROM tblOrderDet orddet JOIN tblOrder ord ON ord.OrderNo = orddet.OrderNo
JOIN tblBOMPdt pdt ON orddet.PartCode = pdt.PdtCode AND orddet.PdtVersion = pdt.PdtVersion          

WHERE ord.CustOrderNo = 'AAA0063'

2. Pdt, Proce, Part 撈出所有材料 PdtKey, PdtVersion, ProcKey, 計算PartCost

select pro.PdtKey, pro.PdtVersion, pro.ProcKey, ( pro.ProcNum *(part.PartNum / part.CardNum * 1000)) as PartCost
from tblBOMProc pro
JOIN tblBOMPdt pdt ON pdt.PdtKey = pro.PdtKey AND pdt.PdtVersion = pro.PdtVersion
JOIN tblBOMPart part On part.Prockey = pro.Prockey AND part.PdtKey = pro.PdtKey AND part.PdtVersion = pro.PdtVersion

3. 1. & 2. 透過 PdtKey, PdtVersion 作連結
SELECT '" & tblFmmac.Rows.Item(i).Item("part").trim() & "' AS OldPartCode,
                  PartCode, PartRule, Unit 
FROM tblStock  
WHERE PartRule LIKE '%" & tblFmmac.Rows.Item(i).Item("part").trim() & "]'"


4.結合 Stock 撈 Unit, 
==========================================================
5. 選配 (以訂單細項的產品的 custSpec, 結合 custID 下去找)

'呼叫 CombClass 去建資料庫 (tblOrderDet JOIN Order, JOIN tblcombdet, JOIN tblStock)
        '從 orderno,  cdet.combcode = (ord.custId + '-' + odet.custspec)
        ' 去撈 品名 PartRule(兩次,預作切割), 選配料號 CombPartCode, 數量 CardNum, 單位Unit

select stock.partrule as OldPartCode ,stock.partrule as PartRule, cdet.*
from tblOrderdet odet JOIN tblorder ord on ord.orderno = odet.orderno
Join tblcombdet cdet on cdet.combcode = (ord.custId + '-' + odet.custspec)
Join tblStock stock on stock.partcode = cdet.combpartcode
WHERE  ord.CustID = 'AAA'
AND odet.custspec  = '0220-TIG'

'最後切第一個 OldPartCode 出來

========================================
@
因為回圈用兩個全域變數來宣告,
每次回圈跑的時候會忘了+1
跑完回圈有時候又忘了初始化=0
......應該不要設全域變數,要改寫法

@
有點邏輯上的問題,跑出的數量與預期的差太多
SQL上問題

@
也可能是說
我還沒把相同物料的需求相累加
所以變成說相同物料需求量的東西出現好幾次
應該要算"總需求量"

=====================================


2011年6月29日 星期三

#VB datatable 中的 SQL 語法 (不透過database)


將相同 資料結構 的 DataTable 結合

DataTable.Load 方法



How do I convert a DataTable to an IDatareader?




        tblTask.Load(tblTaskShow.CreateDataReader)
        tblTask.Load(tblTaskTmp.CreateDataReader)

=========================================================
萬用字元

* 和 % 都可以在 LIKE 比較中做為萬用字元來交替使用。如果在 LIKE 子句的字串含有 * 或 %,則這些字元應該在括號 ([]) 中逸出。如果括號在子句中,則括號字元應該在括號 (例如 [[] 或 []]) 中逸出。萬用字元允許用在模式的開端和末端、或用在模式的末端,或用在模式的開端。例如:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

萬用字元不允許用在字串的中間。例如,不允許 'te*xt'。

====================================================================

datatable select 

多个条件时使用 and、or ,这和 SQL 中一样。
如:
string filter = String.Format("Col1 = '{0}' and Col2 = '{1}'", col1Value, col2Value);
dt.Select(filter);




Dataset 中 2個datatable做join問題(或是做資料比對問題)?


查下去發現有更高階的
就是自己寫方法,帶入參數,建立關聯,
去將兩個 datatable 作JOIN
靠太難了ˊˋ


Dim tmpView As DataView = Dt.DefaultView
Dim tmpTable as DataTable = tmpView.ToTable("TmpTable1",True,"LastName")



===============================================

兩個DataTable的資料列如何合併




[ADO.NET]DATATABLE 新增 DataTable.Row.Add DATAROW發生 這個資料列已經屬於其他資料表(使用情境 DataSet DataTable 取 TOP)


1.先複製來源 DataTable的結構
2.使用複製資料方式加入資料列
dtRss.ImportRow(tb.Rows[iIndex])

datatable.rows.add VS datatable.importrow
加入 某個 row 複製 某個 row
該資料列不可共存於其他table 該資料列可以存在其他table(因為是複製)

這背後運作是啥原理?
=================================================================
另外在作 Datatable.clear()時
將清除Datatable所有資料,包含SCHEMA結構
DataTable.Clear not only removes all of the data from the DataTable, it clears the schema as well
==========================================================
大概知道問提出在哪
似乎是說
你將 table 或是 table  row 要寫入其他 table 時
其他 table 應該遵從要寫入 table 的 schema

最保險的做法是
1.清空要寫入的 table.clear()
2.複製被寫入的table, table.copy()
       將schema,資料值都一併寫入



2011年6月28日 星期二

#VB 效能相關

目前系統跑起來效能相當不佳
不知道是Ram 的關係
還是說我進出資料庫頻繁的關係

要查一下相關資料
==============================
讓送出條件篩選的時候
才作進出資料庫的動作

在每個進出資料庫 try-catch
show msgBox 去顯示執行時間
來測說每個進出的效能好不好

可能是有回圈進出太多
也可能是資料量太大
或是SQL語法寫法問題

應該去修改SQL語法,
只撈要的資料

2011年6月27日 星期一

SQL Join的觀念

[SQL]Join的觀念

http://www.dotblogs.com.tw/hatelove/archive/2010/01/23/13229.aspx

Join ON 交集條件
where table範圍條件

join 多個TABLE時候
似乎要多個表格,在巢狀語法內
都有相當的關聯性
===============================================
table1 join table2 on field1 = field2
此時 on 後面的 欄位,
必須出現在 select 之中,
也就是 JOIN 的條件欄位必須是會出現在 SELECT  之後的欄位

2011年6月23日 星期四

#SQL 資料庫 條件字串 串接 ,型別轉換 問題

碰到說需要下指令去把一些欄位的值 串接
直接用 +

然後有型別上的問題
用 cast( 變數 或是 值 AS 要轉成的型別 )
================================
再使用 LinQ 時
直接使用 .net 的函式來轉型

=================================
一些字串型別處理問題

Trim() : 去掉頭尾空白
Trim( "."c ) : 帶入 字元陣列參數 ,並且帶上 c 表示是 char, 去除該字元

這邊帶入要去除的字元還是有問題
要再查一查

換成用 split(要切的字串, 以什麼去切) 去跑

===================================================

SQL_找出最新日期、最舊日期、最大值、最小值


#VB 事件包裝

很多重複性事件
或許可以透過什麼方式包裝成元件
用呼叫的

跟控制項有關
希望不會是要寫成通用控制項元件

要再查一查

@CASE 1 <物料需求計算> ver-110701

資料庫 table 關聯 說明
===================================================
APEX
庫存基本檔 tblStock - 舊料號找新料號
( PartCode 新料號 )
( 可以在 PartRule 作字串處理,切出舊料號, 一個舊料號可能有兩個新料號(+判斷?) )


訂貨單 tblOrder - 找 訂單號的 最新訂單版本中 定了哪些 料號
( OderNo 訂貨單號 )
( table 裡面有切割出幾個欄位可以跟 FoxPro 的資料作關聯 )

( FormVersion 單據版本 )
( 可以與 OderNo 結合,)

訂貨單細項 tblOrderDet - 從訂單號去找說 定哪些料號的版本, 數量, 客戶規格是什麼
( 與 訂貨單 作關聯 OrderNo)
( 去撈說該筆訂單 有定哪些 料號 PartCode (成品 PdtCode )
   與 (tblOrderDet, tblBOMPdt ) PdtVersion ,
   該料號定了多少的 數量 Qty )


選配基本 tblComb - 可以從 選配編號( CombCode ) 去找說
                                 產品編號( PdtCode ) 與 客戶ID( CustID)
(可以直接從選配細項找選配料號,是否這邊可以不作?)
(選配編號如何編碼?)
()

選配細項 tblCombDet - 從 製程編號( ProcCode ) 去找說 有哪些選配料號( CombPartCode )
================================================================
FoxPro
mmac.dbf   - 使用者輸入 製造日期, 客戶名稱 作為篩選條件
( 製造日期 : Trndate )
( 舊料號 : part ) <tblStock.PartRule>
(訂貨單號 : Mark + Ordno + Trndate) <tblOrder.OderNo: CustOrderNo + OrderDate >
               廠商商標+訂單號+訂單日期                          廠商商標訂單號+訂單日期

訂貨單號可以查找資料,舊料號有意義?


======================================================
1.以"日期範圍"查詢 各物料總需求量 ( 訂單日期 )
2.以"客戶範圍"(AAA~ZZZ之類)查詢 各物料總需求量 ( Mark )

3.顯示各表單關心的資訊 ( 分開 or join )
    目標 : 統計各材料 使用數 基數 去計算 用量
               [tblBOMPart 材料] :  使用數 PartNum  /  基數 CardNum = 用量

4.必須包含各細項物料的詳細資訊表單
   與各物料統計資訊的表單
5.報表能夠列印,能夠轉 Excel

6.訂單 要抓最新版本的 (是說 FoxPro檔案 並不會隨著 tblOrder 改單版本有所變更?)
     Status = 2 訂單已被核對
     FormVersion = MAX 訂單為最新版本
   去撈 該客戶在定單中所訂購的 產品量 ( 成品量 )

   物料不一定是最新版本

[tblBOMPart 材料]  "PdtKey" "PdtVersion"  "ProcKey" "ProcCode" "PartCode"
[tblBOMPdt 成品]   "PdtKey" "PdtVersion"
[tblBOMProc 製程]  "PdtKey" "PdtVersion" "ProcKey" "ProcCode"
[tblOrder 訂單]         "OrderNo"

一個 [訂單] -> 多個 [訂單細項], 一個 [訂單細項] -> 一個 [成品]
一個 [成品] -> 多個 [製程], 一個 [製程] -> 多個 [材料]

7.[tblOrderDet 訂單細項] [tblBOMPdt 成品]
   以 "PdtCode"與"PdtVersion" 作關聯

   * tblBOMPdt.PdtCode = tblOrderDet.PartCode

'1.訂單 + 訂單Det + Pdt
SELECT Odet.OrderNo,Ord.OrderDate,
       Ord.CustID, Odet.PartCode,
       Odet.PdtVersion , Odet.Qty
FROM tblOrder Ord, tblOrderDet Odet, tblBOMPdt Pdt
WHERE Ord.OrderNo = Odet.OrderNo
AND Odet.PartCode = Pdt.PdtCode
AND Odet.PdtVersion = Pdt.PdtVersion


8.[tblBOMPdt 成品] [tblBOMProc 製程]
   以 "pdt.PdtCode"=  "proc.ProcCode" 與"PdtKey"與"PdtVersion" 作關聯
   撈出"ProcKey"
   透過"製程型號"去找材料 ( 原料,半成品 )

   * PdtCode = ProcCode ( 有例外 要問 )

'2.Pdt + Proc
'撈出不同產品的 製程型號 ProcCode

SELECT  Proce.ProcCode, Proce.ProcKey, Proce.PdtKey,
       Proce.PdtVersion, Proce.ProcNum
FROM tblBOMPdt Pdt, tblBOMProc Proce
WHERE Pdt.PdtCode = Proce.ProcCode
AND Pdt.PdtKey = Proce.PdtKey
AND Pdt.PdtVersion = Proce.PdtVersion





9.[tblBOMProc 製程] [tblBOMPart 材料]
   以 "PdtKey"與"PdtVersion"與"ProcCode"與"ProcKey"與 作關聯
   撈出 "PartCode" 主鍵

'3.Proc + Part
'以各材料分類 , 去統計  總使用量

SELECT Part.PartCode, Part.PdtVersion, Part.PdtKey,
       Proce.ProcCode, Part.ProcKey,
       SUM( Proce.ProcNum * ( Part.PartNum / Part.CardNum * 1000 ) )AS PartCost
FROM tblBOMProc Proce, tblBOMPart Part
WHERE Proce.PdtKey = Part.PdtKey
AND Proce.PdtVersion = Part.PdtVersion
AND Proce.ProcCode = Part.ProcCode
AND Proce.ProcKey = Part.ProcKey
GROUP BY Part.PartCode, Part.PdtVersion,
         Part.PdtKey, Proce.ProcCode, Part.ProcKey



10. [tblComb 選配]  [tblOrderDet 訂貨單細項] + [FoxPro 檔案]
     以"CustSpec 客戶規格"與"Mark" 作關聯
     去撈 tblComb.CombCode

11.需要呈現的資料
    訂單號
    訂單日期
    客戶規格
    客戶
    成品內容  "PartCode"
    材料耗用數量 "使用量 = CardNum / PartNum "
 
    以原物料的 PartCode 去排序
    所有原物料細項
    所有原物料統計
    ( 使用數 基數 之間的計算 )


   *成品 Pdt ( 成品 ), 製程 Proc ( 半成品 ), 材料 Part ( 原料 )
   *單位換算 製程 : 公克  (每個成品所需耗用 製程 中的半成品多少公克 )
                      材料 :   ( 在每個製程中 所佔的百分比 ( PartNum(公斤) / CardNum(公克) ) )
   *好像 使用數 = 製程的使用數 X 材料在製程中 所佔的百分比
           ( 製程 .ProcNum X 材料.PartNum(公斤) / 材料.CardNum(公克) )
        ( tblBOMProc.ProcNum * ( tblBOMPart.PartNum / tblBOMPart.CardNum * 1000 )) AS ProcCost
   *統計 每個材料的使用量總合
       SUM( ProcCost )  SELF JOIN


-----------------------------------------------------------
分成幾個 Table
用 JOIN ON 交集條件
來結合
1.訂單 + 訂單Det + Pdt
2.Pdt + Proc
3.Proc + Part (SUM)

=========================================================
'Stock 與 mmac 以舊料號(Stock.PartRule = mmac.part)去找 新料號 ( Stock.PartCode )

'mmac 與 訂單 與 訂單Det, Pdt 以

         Mark + Ordno + Trndate
        'tblOrder.OderNo : CustOrderNo + OrderDate
        '取訂單 已核對過 的 Status = 2
        '以核對訂單 取 版本最新 FormVersion = MAX
 去找 訂單號, 撈 訂單料號

'mmac,訂單Det 以 mark = Det.CustID,


'各材料在該 製程 的 使用量
SELECT ( tblBOMProc.ProcNum * ( A1.PartNum / A1.CardNum * 1000 ) )AS ProcCost
FROM  tblBOMPart As A1, tblBOMProc
WHERE A1.ProcCode=tblBOMProc.ProcCode
AND A1.ProcKey=tblBOMProc.ProcKey
AND A1.PdtKey=tblBOMProc.PdtKey
AND A1.PdtVersion=tblBOMProc.PdtVersion

'以各材料分類 , 去統計  總使用量
SELECT A1.PartCode,
SUM( tblBOMProc.ProcNum * ( A1.PartNum / A1.CardNum * 1000 ) )AS PartCost
FROM  tblBOMPart As A1, tblBOMProc
WHERE A1.ProcCode=tblBOMProc.ProcCode
AND A1.ProcKey=tblBOMProc.ProcKey
AND A1.PdtKey=tblBOMProc.PdtKey
AND A1.PdtVersion=tblBOMProc.PdtVersion
GROUP BY A1.PartCode

'撈訂單中有哪些成品( PartCode )被訂購,訂購多少數量( Qty )
'結合 tblBOMPdt

SELECT Odet.OrderNo,Ord.OrderDate,
       Ord.CustID, Odet.PartCode,
       Odet.PdtVersion , Odet.Qty
FROM tblOrder Ord, tblOrderDet Odet, tblBOMPdt Pdt
WHERE Ord.OrderNo = Odet.OrderNo
AND Odet.PartCode = Pdt.PdtCode
AND Odet.PdtVersion = Pdt.PdtVersion




再來可能就要找地點相關資料

======================================================
邏輯架構

'textbox 條件輸入 ( 123:date, 456:cust)
if ( box1 not null )
 do box1SQL
  else if ( box2 not null ) && ( box3 not null )
      do box2SQL & box3SQL
         else if ( box3 not null )
             do box3SQL
   else
      do
else
 msg( box1 null )

======================================================
介面設計

方案一
1. 登入介面 ( 需不需要作 權限程度 )
2. 選單介面 ( 需不需要作 有哪些項目 )
3. 篩選介面 ( 各條件篩選 資料檢查 )
4. 報表介面 ( 呈現Table 轉Excel 列印 )
     要有物料細項 Table ( 物料編號, 品名, 預估用量, 單位)
     要有物料各項相關統計 Table ( 物料編號, 品名, 總預估用量, 單位)
     可以選擇 要轉的 或 要列印的 Table

方案二
1. 登入介面
2. 選單介面 ( 需不需要作 有哪些項目 )
3. 篩選 與 報表 再同一畫面
     如果這樣 Table 應該要怎麼切
     應該如何呈現

2011年6月22日 星期三

#excel word 巨集

存檔有點問題,
SaveAs(路徑)
卻沒存進去檔案

===============================================
碰到說
巨集格式都寫出來,也能跑
但是存檔卻沒有將所有格式都存進去的奇怪問題

大概知道是存檔類型的問題
應該說看能不能設定存檔的類型,
是 .xls 檔案文件
這樣就可以解決問題

我想可能跟我一開始建立的 Excel 檔案並不是 真的 xlWorkbookNormal 格式的檔案
所以後來開啟在存檔,變成沒辦法轉檔
看能不能一開始寫資料的時候就是建立 xlWorkbookNormal 格式的檔案,去寫 .xls 檔


還是應該想方式去轉檔比較快的樣子
在查一查

WorkbookBase.FileFormat 屬性

關於VB.NET匯出Excel


Worksheet.SaveAs 方法

http://msdn.microsoft.com/zh-tw/library/microsoft.office.tools.excel.worksheet.saveas.aspx


最後透過直接建立WorkBook,建立Sheet,寫入資料
一開始就存成Excel格式解決
不然本來是用WriteStream,寫入,會變成格式是文字檔
再來就變成要處理轉檔成Excel格式
這方面應該有方法
但我不會
要再查一查
===================================================

如何使用VB.net Express執行Office中的VBA Code.

別忘了"Imports Microsoft.Office.Interop",沒引入這個NameSpace可是沒辦法動作的~

其範例節錄如下(以Excel為例)
'建立 Excel App 去跑  
'建立 WorkBooks 去開 Excel 檔案 ( book1.xls )

Dim oExcel As Excel.ApplicationClass
Dim oBook As Excel.WorkbookClass
Dim oBooks As Excel.Workbooks

'Start Excel and open the workbook.
oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBooks = oExcel.Workbooks
oBook = oBooks.Open("c:\book1.xls")

'Run the macros. <= 重點在這邊
 '第一個為sub名稱,第二個為要傳遞的參數
oExcel.Run("DoKbTestWithParameter", "Hello from VB .NET Client")

'Clean-up: Close the workbook and quit Excel.
'做一些清空的動作
oBook.Close (False)
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook)
oBook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks)
oBooks = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel)
oExcel = Nothing


===================================================

如何使用 Visual Basic.NET 的自動化執行 Office 的巨集

http://support.microsoft.com/kb/306682/zh-tw


第一步:加入EXCEL.EXE當參考,基本上跟上一篇一模一樣,請參考[C# .Net] Microsoft.Office.Interop.Excel 讀 / 寫 Excel 語法概全
第二步:引用Microsoft.Office.Interop.Excel命名空間
Imports Microsoft.Office.Interop.Excel

第三步:引用Excel類別


'用於存放Microsoft Excel 引用的變數。 
Public xlApp As Application
Public xlBook As Workbook
Public xlSheet As Worksheet
Public xlRange As Range



第四步:為專案引用Excel,開啟 / 不開啟 一個新的Excel
   On Error Resume Next
'#一部電腦僅執行一個Excel Application, 就算中突開啟Excel也不會影響程式執行
'#在工作管理員中只會看見一個EXCEL.exe在執行,不會浪費電腦資源
'#引用正在執行的Excel Application
xlApp = GetObject(, "Excel.Application")
'#若發生錯誤表示電腦沒有Excel正在執行,需重新建立一個新的應用程式
If Err.Number() <> 0 Then
Err.Clear()
'#執行一個新的Excel Application
xlApp = CreateObject("Excel.Application")
If Err.Number() <> 0 Then
MsgBox("電腦沒有安裝Excel")
End
End If
End If



第五步:快樂使用Excel

================================================
好像不能說直接呼叫 Excel 巨集
不然就是我不會

可以直接把巨集Code直接貼上
要再改一些東西
改什麼要再查一查
應該就可以寫入並且跑巨集的東西

為什麼將Excel的巨集code加入vb.net後


==============================================================
注意宣告變數時候
還有使用上的方式
一些 Excel 上的參數
透過 Excel 的物件去看說 那個參數代表的數值是多少

1. 先 Select
2. 然後再 透過 with xlBook.Sheets(1).Application.Selection.XXXXX
   去做一些動作上的設定
3. END With



xlBook.Sheets(1).Cells.Select()
        With xlBook.Sheets(1).Application.Selection.Font
               .XXX = x
               .XXX = x
        END with


====================================================
有關Excel 執行自動SAVE巨集時,會出現檔名為亂碼但內容相同的檔案問題
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20101114105259J9F&fumcde=FUM20060608180224R4M


有產生 Excel 暫存檔的東西,
必要時應該用的到


===============================================
ASP.NET 使用 Excel
有整個流程 
或許有參考價值
http://www.blueshop.com.tw/board/show.asp?subcde=BRD2005122921505367J


========================================================
將Excel 當成DB 來做匯出
http://itgroup.blueshop.com.tw/ZEasyChen/IT?n=convew&i=168884

#VB 登入介面

'需要抓一些使用者登入資訊
'抓一些 連線字串
'所有連 資料庫 字串 透過 登入介面, 來跟資料庫作連線
'需要做一些權限控管
  ( 使用者登入後, 有權限的頁面按鈕才顯現, 或是說按下後, 提示沒有權限
     使用者細部控制項 控管權限....至少作到新刪修資料庫動作的控管 )

'資料庫帳密 , 系統帳密 應該會不一樣 要在討論
 ( 資料庫的 )   ( apex 員工帳號 )
'需要設置管理員介面,控管各帳號權限

'一些設定是不是要在安裝的時候寫入 ( 這不太會, 應該也是靠程式來解 )
'應該要能夠記憶自訂的輸入 ( 要想一下透過什麼方法 )
    應該是要把資料寫到 資料庫 吧, 然後重啟的時候在去撈資料?


'程式進入點 主表單 如果關閉
是不是說其他表單也一定會關閉

從一個 form 去呼叫另外一個 form2
當 form 關閉以後, form 實體將不復存在
所以 form2 當然也隨之關閉
應該是 form2 參考到 form 的實體

you are calling second form inside the first form, and when you close the first form, its mean you removed the instance of first form from memory, so form2.show can not be open because there is not more form1.
this is same as

return;
a+b;

a+b can never be executed because function is already terminated.

=======================================================

'還有執行緒的問題,
不知道之前不同程式,用同帳號去連資料庫發生無法連線是不是這個問題
要查一下

#VB TextBox 的 游標 '' I '' 與 控制項 的 Focus

游標

TextBox游標位置



让 TextBox 由 Insert 模式变成 Overwrite 模式


TextBoxBase.SelectionLength 屬性



===================================================================

FOCUS
當我按下 ENTER 就 FOCUS 下一個 TEXTBOX 
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20050722220108CPL


===============================================
碰到說
msgBox 跳出來按完按鈕以後
focus 會亂跑
跑到 日期的欄位 取得 focus 以後
因為我把格式會改調的關係
造成自串聯資料庫會錯誤

不是 Focus 問題
因為切字串以後
會將原本 box 內容改掉
注意一下邏輯上走的時候,
何時要將格式改回

寫的時候
系統每個流程上的可能性
都要想到
=======================================================
日期部分,想說要分開處理年月日,
希望使用者點選後,會分別全選年,月,日的部份
單看雙擊事件發生的位置在哪裡

但碰到說,TextBox預設雙擊會全選
變成說必須想辦法去攔截雙擊
讓他不要做全選的動作
這跟程序處理好像有關係,

目前還不甚了解
就先讓他全選,
在透過記憶的方式,去改回要選取的範圍


TextBox限制輸入長度 (中文字算2碼)

2011年6月21日 星期二

#LinQ 作資料查詢

碰到說
資料庫來源不同,建立成兩個 datatable, 該如何再進一步 SQL 篩選結合建立新的 datatable


可能需要透過 LinQ 這個東西來作
要查一下

使用 Visual Basic 撰寫 LINQ 入門

查詢 (Visual Basic)



' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers _
                 Where num Mod 2 = 0 _
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

        ' Query execution.
        '似乎查詢語法的結果,每筆資料會是一個 datarow
        '所以用增加每個 row 的方式

        '不能直接把 LinQ 查詢出來的結果 tbl, 直接複製到 dataTable
        '透過 ImportRow(datarow) 來作,或是 evensQuery.CopyToDataTable 來複製或繫結

LINQ - join 與 let
http://blog.xuite.net/cppbuilder/blog/14800296

==============================================
太不熟了
馬上就碰到問題

從查詢中建立 DataTable (LINQ to DataSet)


偵錯 LINQ



================================================
太靠北了
因為資料數值 可能會包含 ''空白字元"
變成說我再比對欄位的時候
核對找不到資料.....
用trim()去掉頭尾的空白字元
===============================================

查詢DataRow欄位(LINQ to DataSet)


 LINQ的经典例子-Where,Select、SelectMany、SkipWhile子句中使用数组索引


======================================================

SELECT 在使用上
如果有創造或是結合成為新的 datarow 時
要用 SELECT NEW WITH {
                           裡面放自訂的欄位
                              .自訂欄位 = 某個值
                            或是說
                            放原本宣告的 dataTable
                               a, b ........
                                             }

當下 LinQ 字串時
宣告承接 LinQ 字串 的變數型別
要與 SELECT 出來的 型別相當
例如
query as IEnumerable(Of DataRow)
無法承接
SELECT NEW WITH { a, b }
因為 a, b 兩個都是 DataRow,


發現是跟 LINQ 的 select 之下 是 匿名型別
在指定完欄位以後該如何轉換匿名型別為目標型別?


LinQ 學習筆記 – LinQ to SQL

========================================
換個效能不佳的方式先解
用flag去紀錄核對的兩個 table 哪筆資料應該被撈出來
再寫回去 table 裡面 (視情況建立新欄位)

#VB 日期 時間 處理問題

VB.NET时间日期数据处理及技巧
http://hi.baidu.com/love_mybaby/blog/item/7c4dd9c4c127fcc038db4948.html
================================================================
開始要處理日期輸入的合法性問題
如何透過程式去判斷輸入的日期是正確的
似乎可以透過 .NET 一些 Date 物件來輔助
以下
每月日期限制
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20100726133059IGB&fumcde=FUM20050124192253INM
============================================================
處理非數字輸入, 負數, 日期為零的 非法值

限制TextBox 只能輸入數字,以及限制不能使用快速鍵

限制可以 backspace, 數字輸入

還有進階的
依照是否為分類控制項, 或輸入是否為十進制數字
Char.IsDigit 方法 (Char)

Char.IsControl 方法 (Char)


Char.IsControl 方法 (Char),



TextBox控制項-KeyPress事件處理

TextBox數字格式化的問題(繼承)
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20060907121442LA7




又卡關啦....
碰到說 日期格式顯示的問題
可以建立一個格式
但是變成說他text裡面的值會寫死
你沒辦法在去更動


要再查一查
以後應該會用到很多格式的東西


又想了一個辦法,
建立三個不同的變數抓年月日
一個一個字元指定給textbox
但是這樣就要打掉重練......


牽涉到游標問題
要查一查



游標移到Text物件時,預設會選取全部的文字


==========================

   '判斷textbox的輸入格式
    'keypress時 作檢查
    'Leave時 format


============================
透過當控制項取得焦點時
將格式內容的 "/" 給去除掉
可以做到顯示上的效果


還差 Insert 插入覆寫