2012年1月10日 星期二

#LinQ Linq 基本語法 – OrderBy 與 OrderByDescending


Linq 基本語法 – OrderBy 與 OrderByDescending



    Structure Pet
        Public Name As String
        Public Age As Integer
    End Structure

    Sub OrderByEx1()
        ' Create an array of Pet objects.
        Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8}, _
                             New Pet With {.Name = "Boots", .Age = 4}, _
                             New Pet With {.Name = "Whiskers", .Age = 1}}

        ' Order the Pet objects by their Age property.
        Dim query As IEnumerable(Of Pet) = _
            pets.OrderBy(Function(pet) pet.Age)

        Dim output As New System.Text.StringBuilder
        For Each pt As Pet In query
            output.AppendLine(pt.Name & " - " & pt.Age)
        Next

        ' Display the output.
        MsgBox(output.ToString())
    End Sub

#LinQ 透過LinQ做Table多欄位的 Distinct

透過LinQ做Table多欄位的 Distinct

或是 直接做
tbl.DefaultView.ToTable("DistinctTable", True, columnNames)

其中 columnNames 先透過 LinQ 去建立 Table所有欄位名稱的 String()

Dim columnNames As String() = _
   (From tbl In myTable.Columns.Cast(Of DataColumn)() _
   Select tbl.ColumnName).ToArray()


LINQ To Entity同時使用OrderBy與Distinct的小技巧

#VB AccessViolationException

'碰到說透過呼叫PDFViewer控件
開啟PDF檔案,OK沒問題
但後端處理判斷JPG檔案,

計算JPG檔案的Frame數的時候出了問題
(其實JPG檔應該就一個Frame,或許這邊要再改一改)


FreeImage.OpenMultiBitmapEx() 還沒事
在FreeImage.CloseMultiBitmapEx()這邊
發生 AccessViolationException
嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。




如果單純用原始PDFViewer去開啟JPG
則沒有這方面問題


目前透過判斷 JPG 檔案  不做 TIFF計算頁數的方式
單純設定Frame = 1 
就OK了

至於原因 大概可以參考

使用程式自動輪播切換視窗

可能是物件的一些問題吧
要再研究

2012年1月9日 星期一

#VB 已經加入 dll API參考函式庫,卻發生找不到 dll 模組的問題

碰到說 已經在專案下, 加入 DLL 參考元件
撰寫上也能夠自由呼叫使用 DLL 下的物件

編譯上也沒問題
測試執行的時候
卻發生

無法載入 DLL 'FreeImage': 找不到指定的模組。


幹~糗了
就跟字面上一樣
少了 FreeImage.dll
原本的專案並沒加入該參考
但是有 FreeImageNET.dll
猜測應該是 FreeImageNET 裡面有呼叫到 FreeImage 裡面的物件,
所以資料夾下面除了有加入專案參考的 FreeImageNET.dll 以外
必須在包含該  FreeImage.dll

2012年1月8日 星期日

@商標圖片歷史異動查詢系統


大致上完成

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

'目前卡在怎麼將TreeView做子節點排序動作
似乎比較好的做法是,搜出所有要加入的節點後,
先做好排序,
再依排序位置加入節點


'有點怪, 本身應該是BackOn商標
BOM表找的到Backon商標
選配也找到同樣料號商標 (不應該在這邊出現)
要再檢查看看


先判斷是否BACKON
如果BACKON商標存在圖檔
建立節點後

(這邊還需要做判斷說,會不會以重複建立節點問題)


走選配將做判斷
不建立BACKON已建立的節點



'篩選條件串接有點怪怪的



'商標料號篩選這邊,
將不能只判斷選配是否存在該料號
應該將BackOn部分與選配商標合併檢查


===================================================
win2k3ad (pdf, jpg)
需要透過(客戶ID-業務代碼)=客戶規格,
去查詢選配該規格有哪些商標圖片,(0~多)
檢查該商標物料號是否為空白半成品(----XF)
If 非空白=>檢查該商標物料號是否屬於BACKON

NOL0 ,NOL1,NOL2 => NOL皆為空白
第11碼 0 => 空白
        非 0 => BACKON商標


判斷有無舊版商標圖片,
建立查詢清單

點選顯示該商標圖片
商標編碼:
(U%) tblStock與圖片存檔數不符 =>檢查料號有無圖片檔存在
(DW% 庫存無該類料號紀錄)
(VC 只有兩種料號)
===================================================
1.透過篩選條件輸入
2.建立TreeView節點,  (判斷料號是否存在JPG,PDF,不管有無都建立,無=>無路徑紀錄)
   i.選配商標
      a.新版 ( 不會有日期檔名 )
      b.舊版 ( 切出停用日期=>應該就是改版日期 )
      ....
  ii.BACKON商標 (透過成品型號,走BOM表,檢查P包裝製程下是否空白半成品)
                              (11馬=>1以上BackOn, 0=>空白)
      a.新版
      b.舊版
      ....
3.點選呈現去找出該節點所記錄的PDF文件位置
   若無路徑紀錄,不顯示PDF,JPG瀏覽圖片,或做些提示
4.目前是只建立有圖檔的 TreeView Node (檔名),
   看需求再改
5.透過PDFViewer開啟PDF瀏覽 (判斷是否JPG檔案,開啟JPG)
===================================================
'要一個篩選介面
1.需不需要提供大範圍模糊篩選
   類似ERP, 底部是一個選配大範圍清單,
   點選後,Show 瀏覽View,讀取載入相關資料
2.輸入
   CustID & "-" & CustSpec = 選配CombCode,
   CustID
   CustSpec
   成品PartCode (XX,一個成品多個選配)
   商標料號

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


決定用這個了,已經寫好能夠完全不透過Adobe讀取PDF文件
在稍微改一下瀏覽介面
弄成自己要的就 好
偷吃步



    '浏览PDF文档的基本步骤是:
    '获得需要浏览的PDF文档对象的页数,以确定页面的数量(iTextSharp)。
    '将PDF文档对象(全部的或者是某一页)转换为既支持单帧又支持多帧的光栅图像格式(GhostScript API)。
    '从图像中获取出需要浏览的当前帧(FreeImage.Net)。
    '将当前帧转换成一个System.Image。
    '在PictureBox控件中浏览当前帧。

    '下面的一些工具类提供了一些辅助性的功能:
    'GhostScriptLib.vb(包含了将PDF转换成TIFF的方法,可以用来浏览或者打印PDF文档)
    'iTextSharpUtil.vb(提供了获取PDF文档中页数、以及将书签转换为TreeNode的方法)
    'PrinterUtil.vb(包含了将图像发送到打印机的方法)
    'ImageUtil.vb(提供了图像的操作,如改变大小、旋转以及格式转换等)
    'PDFViewer.vb(包括了PDF浏览器用户控件)

    '以下5个DLL必须放置在同一个目录下:
    'FreeImage.dll
    'FreeImageNET.dll
    'gsdll32.dll
    'itextsharp.dll
    'PDFView.dll
    '由于文件大小限制的关系,我无法将Ghostscript 8.64 DLL(gsdll32.dll)打包到源代码中,
    '请从sourceforge下载Win32 Ghostscript 8.64 package,并且把gsdll32.dll放置到\PDFView\lib文件夹下,与其他DLL放在一起
    '********************