제가 만들고 있는 프로그램은 회사에서 쓰는 기술자료의 리비전을 관리하는 프로그램을 설계중에 있습니다.
우리 회사의 경우, 리비전이 NEW, A, B, ........., Z까지 순차적으로 증가합니다.
그래서 아래의 그림과 같이 일련번호랑 스테이지를 적으면 프로그램을 자동 조회하여 NEW가 있으면 A로,
A가 있으면 REV 화면에 자동으로 B를 나오게 하는 걸 지금 구상중에 있에 있습니다.
문제는 NEW가 있어서 쿼리를 하는데, 자꾸 문제가 발생하네요. A~Z까지는 증가 시킬 수 있는데, NEW가 있어서인지, 자꾸 NEW, A가 있더라도 O라는 파일이 자동으로 됩니다.
어떻게 해결해야 할까요 ㅠ 쿼리에서 NEW를 안나오게 하는 방법도 해 봤습니다. 근데 이럴 경우에는 과거 데이터의 경우에는 NEW, A, N, O 등 순차적으로 안 들어간 자료가 많아서요, 이것도 고려해서 프로그램을 코딩해야해서요 .
고수분들 도와주세요,
Query = "SELECT " _
& " CASE " _
& " WHEN E600REV = 'NEW' THEN '' " _
& " WHEN E600REV <> 'NEW' THEN MAX(E600REV) " _
& " End " _
& " FROM HE600 " _
& " WHERE E600DOC_TYPE = 'CMM' " _
& " AND E600NO = '" & LTrim(RTrim(TextBox8.Text)) & "' " _
& " AND E600STAG = '" & LTrim(RTrim(TextBox9.Text)) & "' "
Query = "SELECT " _
MAX(E600REV) "
FROM HE600 " _
WHERE E600DOC_TYPE = 'CMM' " _
AND E600NO = '" & LTrim(RTrim(TextBox8.Text)) & "' " _
AND E600STAG = '" & LTrim(RTrim(TextBox9.Text)) & "' "
MAX(E600REV) "
FROM HE600 " _
WHERE E600DOC_TYPE = 'CMM' " _
AND E600NO = '" & LTrim(RTrim(TextBox8.Text)) & "' " _
AND E600STAG = '" & LTrim(RTrim(TextBox9.Text)) & "' "
SQuery = "Password = hpms_user;" _
& "User ID=hpms; " _
& "Data source=oldserver;" _
& "Initial Catalog = HAS기술자료_A"
& "User ID=hpms; " _
& "Data source=oldserver;" _
& "Initial Catalog = HAS기술자료_A"
SQLCo = New SqlConnection(SQuery)
SQLCo.Open()
SQLDA = New SqlDataAdapter(Query, SQLCo)
SQLDA.Fill(SQLDS, "NC장비")
SQLDV = New DataView(SQLDS.Tables("NC장비"))
SQLCo.Close()
SQLCo.Open()
SQLDA = New SqlDataAdapter(Query, SQLCo)
SQLDA.Fill(SQLDS, "NC장비")
SQLDV = New DataView(SQLDS.Tables("NC장비"))
SQLCo.Close()
For i As Integer = 0 To SQLDV.Count - 1
If SQLDV.Count = 0 Or IsDBNull(SQLDV.Item(i).Item(0)) Then
REV = "NEW"
Else
If Asc(SQLDV.Item(i).Item(0).ToString) = 90 Then
MsgBox("현재 리비전이 'Z'입니다. 더이상 리비전을 추가할수 없습니다.")
GoTo Out
Else
For asc_num = 65 To 89
If Asc(SQLDV.Item(i).Item(0).ToString) = asc_num Then
REV = Chr(asc_num + 1)
GoTo out
End If
Next
End If
End If
Next
REV = "NEW"
Else
If Asc(SQLDV.Item(i).Item(0).ToString) = 90 Then
MsgBox("현재 리비전이 'Z'입니다. 더이상 리비전을 추가할수 없습니다.")
GoTo Out
Else
For asc_num = 65 To 89
If Asc(SQLDV.Item(i).Item(0).ToString) = asc_num Then
REV = Chr(asc_num + 1)
GoTo out
End If
Next
End If
End If
Next
out:
TextBox7.Text = REV
Comment 2
-
건우아빠
2014.04.10 22:48
with resas(select 'NEW' cd union allselect 'A' cd union allselect 'B' cd union allselect 'C' cd union allselect 'D' cd union allselect 'E' cd union allselect 'F' cd union allselect 'G' cd union allselect 'H' cd union allselect 'I' cd union allselect 'J' cd union allselect 'K' cd union allselect 'L' cd union allselect 'M' cd union allselect 'N' cd union allselect 'O' cd union allselect 'P' cd union allselect 'Q' cd union allselect 'R' cd union allselect 'S' cd union allselect 'T' cd union allselect 'U' cd union allselect 'V' cd union allselect 'W' cd union allselect 'X' cd union allselect 'Y' cd union allselect 'Z' cd )SELECT CD-- , CASE WHEN CD = 'NEW' THEN '@' ELSE CD END, ASCII(CASE WHEN CD = 'NEW' THEN '@' ELSE CD END ), ASCII(CASE WHEN CD = 'NEW' THEN '@' ELSE CD END ) + 1, CASE WHEN CD = 'Z' THEN 'Z' ELSE CHAR(ASCII(CASE WHEN CD = 'NEW' THEN '@' ELSE CD END ) + 1) ENDFROM Res -
차차리아카
2014.04.11 08:11
헉!!!! 감사합니다 ㅠ
아침부터 계속 하고 있는데요 ㅠ 안되서 이렇게 답변을 달게 되었습니다.
이게 SQL 쿼리분석기에서는 잘 돌아가는데, Vb.net에서 하면 자꾸 이런 오류가 나네요.
그래서 'E600REV --' 이 부분이 문제 인거 같아서 지우고 하면 프로그램을 짜면 값을 제대로 불러오지를 못해서요 ㅠ
문제를 풀지를 못하고 있습니다.
한번만 도와주세요ㅠ