How can return XML from a stored procedure using VB? (10762 Requests)

I've gotten quite a few requested for an example using a stored procedure instead of a template. So this example uses a regular stored procedure.

  1. Create a new EXE project in VB.
  2. Add references to MSXML 4.0 and ADO 2.6
  3. Create the stored procedure listed below.
  4. Copy the code below into your form's code. Be sure to change the connection string.

Stored Procedure

create proc employee_get
(
	@id int
)
as

	select 	FirstName, 
		LastName, 
		Title,
		Region
	from 	employees
	where	employeeid = @id
	for xml auto

go

VB Code

Dim oCmd As Command
Dim oPrm As Parameter
Dim oDom As IXMLDOMDocument2
   
Set oDom = New DOMDocument40
   
Set oCmd = New Command
oCmd.ActiveConnection = "Provider=SQLOLEDB; Data Source=; " & _
    "User ID=; Password=; Database=Northwind"
       
oCmd.CommandText = "employee_get"
oCmd.CommandType = adCmdStoredProc
    
Set oPrm = New Parameter
oPrm.Name = "@id"
oPrm.Value = "1"
oPrm.Type = adInteger
oPrm.Size = 4
oCmd.Parameters.Append oPrm
        
oCmd.Properties("Output Stream") = oDom
oCmd.Execute , , 1024

oDom.Save "c:\temp\results.xml"
    
Unload Me

Other Resources:
Returning XML in VB with a template

HOWTO: Retrieve XML Data by Using a SQL XML Query in a Visual Basic Client

HOWTO: Retrieve XML Data with a Template File from a Visual Basic Client

Posted by 나비:D
:

출처 : http://www.topxml.com/sql/articles/adoforxml/
Using VB and ADO to return and update Record Set based XML

by: Sean Grimaldi, Serious Consulting LLC.

This article is about making the most of ADO and XML until the complete Visual Basic.net, including ADO.net, becomes available.  This article is focused on how you, as a developer, can use ADO and XML today; and get valuable skills that apply to Visual Basic.net.  I also want to show how you can use ADO, XML, and XSL today, to improve the quality of your development.

 I am taken aback almost daily, at the slow adoption many standards-based technologies face.  XSLT is a fine example.  XSLT reached candidate recommendation, meaning the w3c considered it stable and encouraged implementation, in November 2000.   I am writing this article six months later, in a room packed with developers working for a worldwide software company.  Not one of these developers, that I am aware of, has ever used XSLT in a production environment.

 Part of the blame must go to how Microsoft spoiled us with Visual Basic.  As a development tool, it is unparalleled.  Think how simple it is to get an ADO Recordset; Visual Basic will even assist you in debugging the SQL query.

Unfortunately, at this time the situation is not at all the same with XSLT.  Microsoft does not currently make a powerful IDE that includes a powerful XML editor.  Visual Interdev, for example, mangles XSL. The best XML IDE available from Microsoft is XML Notepad (http://msdn.microsoft.com/xml/NOTEPAD/download.asp). As Visual Basic developers expecting features like statement completion, this is a tremendous loss.

We all suspect Visual Basic.net will provide us with the tools to make the use of these technologies simple, but until then, I would like to offer a few pointers to flatten the learning curve.

As an example of coming XML tools, Microsoft includes a XML Designer with color codes and statement and tag completion in Visual Studio.net.

Figure 1. Color-Coded XML Designer with Statement and Tag Completion

Since most developers prefer code samples to help illustrate technologies with which they are unfamiliar, this article loosely follows a sample. The sample scenario is simple and something you will likely run into frequently.  I am interested in improvements you may make or ways in which you extend it to be more useful.  Please email me your comments at my website, http://www.SeriousConsulting.com.

ADO

Every Visual Basic developer sooner or later becomes quite strong with ADO, because it is comparatively simple and allows access to every data source the developer is likely to encounter.

The disconnected Recordset is the staple of Microsoft web development.  It is most likely the single programming practice that can increase the scalability of a Visual Basic and/or ASP driven web site more than any other.  ADO makes it almost effortless.  A disconnected Recordset is simply a Recordset that no longer has a live connection to the server.  To disconnect a recordset, set it's ActiveConnection property equal to nothing. At this point it is safe to close the ADO connection object as well.  In ADO.net by default the data set is disconnected.

'declare variables

Dim objConn as new ADODB.Connection

Dim objRS as new ADODB.Recorset

Dim strConnectionString as String

Dim strSQL as String

'open Connection

objConn.open strConnectionString

'optimize record set properties

objRS.CursorLocation = AdUseClient

objRS.CursorType = adOpenStatic

objRS.LockType = adLockBatchOptimistic

'open the record set

objRS.open strSQL , objConn

'disconnect the record set and close Connection

Set objRS.ActiveConnection = Nothing

ObjConn.Close

'use the recordset

While NOT objRS.eof

'do something

Wend

In a couple of lines data can be retrieved from almost any data source a developer is likely to encounter, including text files and many spreadsheets.

XML

XML is the future for almost all data transmission and data manipulation.  Notice that I did not say anything about the Internet; XML is that huge!

Microsoft, IBM, and Sun support XML-based standards, which include SOAP and UDDI.  These two XML based technologies promise interoperability at the method level across languages, domains, and platforms.  This interoperability allows the RAD abilities of Visual Basic to be felt everywhere, ensuring Visual Basics' place as the most popular development language for years to come.

SOAP is a platform independent protocol, in this sense like HTTP, for exchanging messages in a decentralized, distributed-environment using XML.  SOAP is more standards-based and platform-neutral than previous technologies like CIS, RDS, and Remote Scripting.

The Universal Discovery Description and Integration (UDDI) specifications define a way to publish and discover information about Web Services using XML.  Since a major portion of new development will be Web Services based, UDDI is extremely important because it allows the appropriate functionality to be found on the Internet and utilized.

Best of all, this major shift to platform-independent Web Services as a new industry-wide software model, is fairly simple, all thanks to XML.

Although you can hand-code XML, as you can with HTML, it is easier to have the application do the work. Although this is really BizTalk's forte, here is an example of SQL Server 2000 doing the work, using the very handy FOR XML clause.

SELECT TOP 10 FirstName

FROM Employees

FOR XML AUTO

Results in:

<Employees FirstName="Nancy" EmployeeID="1"/>

<Employees FirstName="Andrew" EmployeeID="2"/>

<Employees FirstName="Janet" EmployeeID="3"/>

<Employees FirstName="Margaret" EmployeeID="4"/>

<Employees FirstName="Steven" EmployeeID="5"/>

<Employees FirstName="Michael" EmployeeID="6"/>

<Employees FirstName="Robert" EmployeeID="7"/>

<Employees FirstName="Laura" EmployeeID="8"/>

<Employees FirstName="Anne" EmployeeID="9"/>

Unfortunately, the FOR XML AUTO clause does not support all SQL statements.  It currently does not even support GROUP BY, for example, which is fairly common.

An alternative to the FOR XML clause is executing SQL statements using the URL.  Although this sounds like the dream of every ASP developer, after all it takes the form of a URL with a SQL statement in the query string, URL access does not allow you to easily write generic Visual Basic functions that return XML from any data source.

http://IISServer/Nwind?sql=SELECT+top+10+FirstName+FROM+Employees +FOR+XML+RAW&root=ROOT

How can you write a generic Visual Basic function that accepts standard SQL statements?  You can not just tack FOR XML AUTO on the end of a regular SQL statement or stick it in the URL.

Even worse, you rely on other database vendors supporting FOR XML or SQL access using HTTP in exactly the same manner.  

ADO equals effortless XML

Fortunately plain ADO does allow you to easily retrieve XML, today.

You can write a generic Visual Basic function, or even one in VB Script, based on the model of a SQL Select query as a parameter and a return value of a XML string.  Furthermore it allows you to easily retrieve the XML, use it, and update it back to the database.  This is functionality you are likely to use again and again, so it is valuable to put the functionality in a data access class.

Since there are so many interesting options available while writing this class, each worthy of its own article, I broke it down into three parts.  Perhaps in future articles, I will explore each part in more depth.

Get the XML from ADO

Call this class ClsDataAccess so it is clear what we intend to use it for.  The most obvious way to implement the class using a simple method GetRS, is still fairly awkward to use.

 Public Function GetRS(ByVal strSQL as String,ByVal strConnectionString as String) as ADODB.Recordset

The awkwardness comes from having the ConnectionStringproperty exposed to the developer, especially if the password is reasonably secure.

"provider=SQLOLEDB; data source=db3x.seriousconsulting.com; initial catalog=Pubs; UID=mtsusr01; PWD=38710z2c7993F82"

How secure can a password be if every developer, designer, content manager, and QA team member has access to a username and password with full read and write permissions on the production server?  Furthermore, changing values within the connection string does not allow the connection to be pooled as efficiently, reducing scalability.

A solution that simplifies reuse and increases security is to set the connection strings as enumerated constants.  Here I provide constants for only two database connections, but in practice, there may often be several.

'the db connectionstrings constants

Public Enum eCONNECTIONSTRING

   CS_Pubs = 0

   CS_NorthWind= 1

End Enum

A simple private function in ClsDataAccess that applies values to the enumerated constants may look like this:

Private Function EvalEnumCS(ConnectionString)

'this is a helper function used by the methods to evaluate the enum value

     If ConnectionString =  CS_ Pubs Then

          EvalEnumCS =  "provider=SQLOLEDB; data source = db3x.seriouscons

ulting.com; initial catalog = Pubs; UID = mtscsusr01; PWD =1eer5130q82F"

     ElseIf ConnectionString = CS_ NorthWind Then

          EvalEnumCS =  "provide r=SQLOLEDB; data source=db2x.ohgolly.com; initial catalog = NorthWind; UID = mtscsusr02; PWD = c4883H55433"

     End If

 Exit Function

By using enumerated constants the method is simpler to use; and by using a function to process the values of the constants, access can be changed in one place for the whole site.  Additionally developers do not need to know any passwords, they create an object from the ClsDataAccess class, pass in a SQL query as a parameter and pick a constant.

Figure 2. Using Enumerated Constants for Database Access

A subtle point that you may have missed is that the connection strings are using a DNS as the datasource property.  This allows the compiled component to be deployed to a development server, QA server, or a production server and hit the correct database without being recompiled.  This is perhaps the best way  to get around the serious shortcoming of having to recompile the class to access a different database in development versus production without having to pass the server name or DSN as an argument of the method.  Remember, passing the Connection String or a DSN as a parameter does not make the GetRS method especially useful.

Here is the GetRS method of the ClsDataAccess, with the enumerated constants and a function to evaluate the constants incorporated into the class.

Public Function GetRS(ByVal strSQL As String,ByVal ConnectionString As eCONNECTIONSTRING = CS_Pubs)

As ADODB.Recordset

'declare variables

Dim objConn as new ADODB.Connection

Dim objRS as new ADODB.Recorset

Dim strConnectionString as String

'set the connection string = to the value of the constant

strConnectionString = CStr(EvalEnumCS(ConnectionString))

'open Connection

objConn.open strConnectionString

'open the record

   'continue as before

This GetRS method is pretty good as a demonstrator, but it returns an ADO Recordset rather than XML. You may want to add error handling and keep it as a method in your data access class, adding a separate method to return XML.

Using Microsoft XML Parser (MSXML) 3.0 there are a couple of ways to get a XML document from the Recordset.  Since the goal is to get XML, and XML is a string, I save the Recordset object to an ADO stream object as XML.

'once the record set is open

objRS.save objADOStream, 1 'adPersistXML

Set objRS.ActiveConnection = Nothing

Conn.Close

' Put the Recordset Stream into a string variable.

strXML = objADOStream.ReadText(-1)  '-1=adReadAll

'return the XML string rather than the record set object

With ADO 2.5 and later, Recordset objects can be persisted into any object that implements the IStream interface. The obvious choice is the ADO Stream object, although the ASP response object also implements IStream.

I use the ADO stream object, which is regrettably infrequently used, so the XML does not have to be saved as a document before we can work with it.  The Recordset can also be saved directly into the XML DOM object. This is more scalable, as it skips having to save the Recordset into an ADO Stream and then loading the ADO Stream into the DOM object.   For demonstration purposes, it is clearer to do the extra step.   Now, you have a usable function that returns XML as a string in a standard ADO Recordset definition.  ADO even allows persistence of hierarchical Recordsets into XML, so you are not especially limited.

Get HTML from the XML

Just to give you an idea of the many uses of XML, lets display the XML as HTML on a web page. Since XML is just data in a text format, you have to transform it with a presentation style before it can be displayed as HTML.  If you write out the raw XML string to a web page the user's browser will not display anything. However, the XML is shown in Source View.

It may not be clear to you what you are seeing in the page source. The source is broken into two sections, a schema section followed by a data section.

The XML document starts with a definition of the record set schema and some additional Meta information. The simplest way to think of a schema is to think of the document as an instance of the schema in the same way an object is an instance of a class.

The actual Recordset data is contained in elements that look like this:

<z:row FirstName='Sean' LastName='Grimaldi' />

If you try working with the XML and experience unexpected problems remember that ADO, and almost all of Windows, is UTF-8 format, where as Java and XML are Unicode.

The Presentation = XML + XSL

In this instance we are using only using simple XSL, although you could also display the XML using Cascading Style Sheets (CSS).  

XSL becomes complex quickly, so it may be useful to keep it basic at first.  There are many excellent code samples and articles on XSL on the Internet, even if there are currently no tools as simple as Visual Basic for working with XSL.

It may be simpler to use a generic XSL style sheet since it will work on any ADO DB Recordset; and modify the XSL as the situation calls for.  An excellent example of a generic XSL style sheet can be in Michele Vivoda topxml.com article http://www.topxml.com/xsl/articles/xsl_ado/.

An ASP page that combines the XML and the XSL could be very short.

'get the XSL style sheet

styleFile = Server.MapPath("Genericxsl.xsl")

'create an XML DOM object, an XSL Dom object, and your Data Access object

Set XMLDoc = Server.CreateObject("Microsoft.XMLDOM")

Set XSLDoc = Server.CreateObject("Microsoft.XMLDOM")

Set DataAccess = server.CreateObject("ProDataAccess.ClsDataAccess")

XMLDoc.async = false

 'load the XML returned from your GetRS method into the XML object XMLDoc.loadXML(DataAccess.GetRs(strSQL,1))

 XSLDoc.async = false

'load the XSL stylesheet into the XSL object

XSLDoc.load(styleFile)

 'write our the HTML result of combining the two

Response.Write XMLDoc.transformNode(XSLDoc)

Combining the XML returning GetRS method with the XSL style sheet results in a plain little HTML table.  Since XSL is much more powerful than what the example has demonstrated, please remember that you could do much, much, more with the XML.  Microsoft Biztalk Server excels at generating XSL so one XML schema can be mapped to a different XML schema.  This means that if you can map fields from one XML document to fields in a generic XML document, you can write more abstract code that deals with one generic case.  This results in more code reuse, faster development, centralized error handling, and more maintainable code.

Get ADORS from the XML

Since you now know that XSL can transform one XML document into an XML document with a different schema, you may have realized that you can transform a very dissimilar XML document into an XML document that is valid to the ADO Recordset schema.  This means you could convert the ADO schema based XML document back into a Recordset, which could be updated to the server/Database.  This uses the source parameter of the ADO Recordset object.

' Open the Stream back into a RecordsetObject.

objRs.open  ADOStream

Almost Done

As I stated, this article is about making the most of ADO and XML until the full-blown Visual Basic.net becomes available.  It covers the Stream object, which is unfortunately commonly ignored.  The sample began showing how ADO could be used to get an XML document from the database.  Secondly the sample demonstrated how the XML document could be used to display records in an HTML table using XSLT.  Lastly, the sample showed how to get the XML into a Recordset object so that the database could be updated.

Obviously this example could be extended quite a bit.  As mentioned, to increase scalability the Stream object could be eliminated from the class. Other extensions, such as more sophisticated XSLT combined with CSS would be valuable in real-world situations.

I hope you reuse the concepts in this article often and to good measure.

Here are some resources you may find useful:

MSDN ADO Stream
http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/dasdk/mdao1ajx.htm

UDDI.org
http://www.uddi.org/

W3C SOAP
http://www.w3.org/TR/SOAP/

W3C XSL
http://www.w3.org/Style/XSL/

TopXML
http://www.topxml.com/xsl/

Posted by 나비:D
:
1. Oracle Client를 설치하고, 연결할 Oracle을 에 대한 설정을 한다.

2. DB connect Function(여기서 XXX 부분에 Oracle Client에서 설정한 값을 입력한다.)
  - DB 연결이 필요한 부분에 아래 function을 호출한다.

Private Sub ConnectDB()
    Set adoOraCon = New ADODB.Connection
   
    With adoOraCon
        .ConnectionString = "Provider=MSDAORA.1;Data Source=XXX;User ID=XXX;Password=XXX;Persist Security Info=True"
        .ConnectionTimeout = 60
        .Open
    End With
End Sub

3. 모듈에  다음 function을 입력한다.
Option Explicit
Public adoOraCon As ADODB.Connection

'   Procedure : GetRecordSet
' Description : 인자로 넘어오는 쿼리를 실행하고, 결과값을 RecordSet으로 반환
'   Parameter : szSql(쿼리)
'Return Value : Recordset
Public Function GetRecordSet(ByVal szSql As String) As ADODB.Recordset
   
    Dim adoRs As ADODB.Recordset
   
    Set adoRs = New ADODB.Recordset
   
    adoRs.Open szSql, adoOraCon, adOpenKeyset, adLockBatchOptimistic
       
    'Recordset 반환
    Set GetRecordSet = adoRs

    Set adoRs = Nothing
       
End Function

'   Procedure : ExecuteQuery
' Description : 인자로 넘어오는 쿼리를 실행하고 성공여부를 반환
'   Parameter : szSql(쿼리)
'Return Value : True/False
Public Function ExecuteQuery(szSql As String) As Boolean
   
    On Error GoTo ErrHandler
   
    adoOraCon.Execute szSql
   
    ExecuteQuery = True
   
    Exit Function
   
ErrHandler:
    If Err.Number <> 0 Then
        MsgBox Err.Source & vbCrLf & Err.Description, vbExclamation, "쿼리 수행 오류"
        ExecuteQuery = False
        Err.Clear
    End If
End Function

4. 원하는 쿼리를 만들어 모듈의 function을 실행한다.
  - 일반적으로 값을 가지고 오는 Select Query이면, GetRecordSet를 실행하고,
  - insert, delete와 같은 데이터 조작 쿼리인 경우에는 ExecuteQuery를 실행한다.

  예) SELECT Query
    Dim strSQL As String
    Dim adoRs As ADODB.Recordset
   
    '//IMPORTANT : 조회 쿼리 생성
    strSQL = "SELECT * FROM TEST_TAB ORDER BY A_COL"
   
    Set adoRs = GetRecordSet(strSQL)

    While Not adoRs.EOF
        '//IMPORTANT : 가지고 온 결과를 처리하는 부분
        adoRs.MoveNext
    Wend
   
    adoRs.Close
    Set adoRs = Nothing

  예) Execute Query
  Dim strSQL As String
  strSQL = "INSERT INTO TEST_TAB(a_col, b_col, c_col, d_col) VALUES ('" & strName & "', '" & strKorean & "', '" & strMath & "', '" & strEnglish & "')"
       
  If ExecuteQuery(strSQL) = False Then
      Msgbox "실패"
  Else
      Msgbox "성공"
  End If
Posted by 나비:D
:
출처 : http://cafe.naver.com/eclipseplugin.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1503

이클립스에 포함된 클래스의 양이 많아지다 보니 클래스를 로딩하는 공간인
Permanant Heap이 모자라서 튕기곤 합니다.

이클립스 실행시 -vmargs -XX:MaxPermSize=256m -Xms128m -Xmx512m 옵션을 붙여서 실행하세요. (참고)

저는 리눅스를 써서 몰랐는데 최근 윈도우 XP를 쓰면서 1G 이상은 메모리가 안 잡혀서
한참 삽질하였습니다. (아마 32비트 버전의 제약이겠죠??)
-Xmx는 그냥 검소하게 512 정도로 사용해야겠네요.

3.3이후로는 eclipse.ini에 아예 PermSize 옵션이 있는데도
우리가 주로 사용하는 Sun JVM에는 적용되지 않는다고 합니다. (참고)

ologist님의 지적에 따르면 이클립스 뿐만 아니라 WAS에서도 AOP 등으로 인해
요즘 dynamic class generation이 많이 발생해서 PermSize가 모자란 경우가 많다고 합니다.
다만 이클립스의 경우는 dynamic class generation 보다는 XML(plugin.xml)에 의한
static class의 dynamic binding이기 때문에 실행하면서 무한히 용량이 늘어나는 경우는
없을 듯 합니다.
Posted by 나비:D
:
 
장점
- 직관적인 사용법: Ctrl+/ 주석 처리와 기본 인코딩 지원(최대 강점)
- 높은 버전: 안정성을 기대할 수 있다.
단점
- 도움말이 없다.


주석처리 지원과 인코딩 변환이면 핵심 기능은 다 있는 것이다.
Preferences 설정을 통해서 키 중복을 막을 수도 있다.
 
ResourceBundle Editor
장점
- 막강한 기능: i18n 지원, 프로퍼티 Tree view 제공, 마법사 기능
단점
- 도움말이 없다.
- 복잡한 사용법(최대 약점)
- 조악한 UI

 
뭔가 그럴싸하지만, 적응이 필요한 화면이다.
정작 에디터에선 Ctrl+/ 로 주석처리가 안된다.ㅡㅡ;
 
i18n을 많이 써야 하는 다국어 지원 솔루션 개발자들에게는 유용할 것 같다.

일반적인 정보시스템, 웹 개발, 단일어 어플리케이션 개발에는 Properties가 더 나은 듯..
Posted by 나비:D
:

1.    F1 : 선택된 항목에 대한 비주얼 베이직 도움말 보기
2.    F2 : 개체 찾아보기
3.    F3 : 다음 찾기
4.    F5 : 컴파일하기
5.    Crtl+F5 : 전체 컴파일한 후 다시 시작하기
6.    Crtl+F : 찾아보기 (Find)
7.    Crtl+H : 바꾸기
8.    Crtl+I : 변수등의 요약 정보
9.    Crtl+J : 속성과 메소드 목록보기
10.    Crtl+Z : 실행 취소
11.    Crtl+DEL : 한 단어만 지우기
12.    Crtl+오른쪽 화살표 : 한 단어만큼 오른쪽으로 이동
13.    Crtl+왼쪽 화살표 : 한 단어만큼 왼쪽으로 이동
14.    Crtl+Home : 해당 모듈의 처음으로 이동
15.    Crtl+End : 해당 모듈의 끝으로 이동
16.    Crtl+아래쪽 화살표 : 다음 프로시저의 첫번째 줄로 이동
17.    Crtl+위쪽 화살표 : 이전 프로시저의 첫번째 줄로 이동
18.    Crtl+Page Up : 이전 프로시저 선언으로 가기
19.    Crtl+Page down : 다음 프로시저 선언으로 가기
20.    Crtl+스페이스바 : 나머지 단어 채우기
21.    Shift+F2 : 프로시저 정의 보기
22.    Shift+F3 : 이전 찾기
23.    Shift+F10 : 오른쪽 마우스 버튼 클릭한것과 동일한 효과
24.    Shift+Tab : 선택된 부분의 들여쓰기 해제
25.    Shift+오른쪽 화살표 : 오른쪽으로 한 단어 더 선택하기
26.    Shift+왼쪽 화살표 : 왼쪽으로 선택된 한 단어 해제하기
27.    Shift+아래쪽 화살표 : 위로 한 줄 더 선택하기/지우기
28.    Ctrl+Shift+F2 : 가장 마지막으로 가기
29.    Ctrl+Shift+J : 상수 열거
30.    Ctrl+Shift+I : 인수 정보 보기


  1. Shift + F2        : 선언된 함수, 변수로 이동하기
  2. Shift + Ctrl + F2 : Shift + F2 로 가서 되돌아오기
  3. F8                : 한문장씩 실행하기(중지모드에서 사용)
  4. Shift + F8        : 어떤 문장이 사용자 정의 함수를 호출할시
                         F8키는 함수안으로 들어가지만, Shift + F8 키는
                         함수를 모두 실행하고 다음 문장으로 이동합니다.
                         (중지모드에서 사용)
  5. Ctrl + F9         : 노란색선을 원하는 위치로 이동하기
                         중지모드에서 현재 실행중인 코드가 노란색으로
                         나타납니다. 마우스나 키보드로 특정문장으로
                         커서를 이동 시킨뒤 Ctrl + F9키를 누르면
                         여기부터 다시 실행할 수 있습니다.
  6. Ctrl + SpaceBar   : 단어채우기
                         코딩중 긴함수나 긴변수를 일일히 쓰는건 아주
                         짜증나는 일입니다. 만약 변수명이 mintRecordCount
                         일 경우 mintR 한다음에 Ctrl + SpaceBar를
                         누르면 단어가 자동으로 채워 집니다.
                         (중복 단어가 있으면 골라서 사용할 수 있습니다.)
  7. 꽁수(....^^)
     만약 어떤 이벤트를 테스트할 목적으로 디버깅 하려면 여러분들은
     보통 어떤식으로 하십니까?... 아마 그 이벤트에 F9키를 눌러서
     중단점을 잡아 놓고서 F5키를 눌러서 실행 할 것입니다.
     그런데 중단점을 잡아 놓지 않고, 할수 있는 방법이 있는데 그 방법을
     설명해 드리겠습니다...

     먼저 실행도중에 Ctrl + Break키를 눌러서 중지모드 상태로 들어갑니다.
     다음에 F8키를 누르고, 어떤 이벤트(버튼클릭 또는 키보드 입력 ....)를
     발생시키면 디버깅 상태로 들어갈 것입니다.(전재조건 : 발생시킨 이벤트
     안에는 반드시 코드가 있어야겠죠...)



단축키(ShortCut Key) 설명
   CTRL+C              선택영역 복사하기  
   CTRL+X              선택영역 잘라내기
   CTRL+Y              현재줄 잘라내기  
   CTRL+V              붙여넣기  
   CTRL+DELETE         문장단위로 지우기
   TAB                 선택영역 한번에 내여쓰기  
   SHIFT+TAB           선택영역 한번에 들여쓰기  
   CTRL+Z              되돌리기(실행취소)  
   CTRL+RIGHT ARROW    다음 단어로 이동  
   CTRL+LEFT ARROW     이전 단어로 이동  
   CTRL+DOWN ARROW     다음 프로시져로 이동  
   CTRL+UP ARROW       이전 프로시져로 이동
   SHIFT+F2            정의 보기  
   CTRL+F              찾기  
   CTRL+H              바꾸기  
   CTRL+S              저장하기  
   F7                  코드창으로 이동하기
   F4                  속성창으로 이동하기  
   CTRL+R              프로젝트 탐색기로 이동하기  
   F5                  실행  
   F8                  한 단계씩 코드 실행



Posted by 나비:D
:

애스터리스크(*) 표시가 있는 항목은 W3C DOM에 대한 Microsoft의 확장 기능을 나타낸다.


async(*) : 비동기식 다운로드를 허용할 것인지를 나타내며, 읽고 쓰기가 가능하다.

attributes : 주어진 노드에 대한 속성 목록을 저장하며, 읽기 전용이다.

baseName(*) : Namespace에서 확인된 기본 이름으로, 읽기 전용이다.

childNodes : 자식 노드들의 목록을 저장하며, 읽기 전용이다.

dataType(*) : 주어진 노드에 대한 데이터 형식을 제공하며, 읽고 쓰기가 가능하다.

definition(*) : DTD 또는 스키마에서의 노드에 대한 정의를 제공하며, 읽기 전용이다.

doctype : 주어진 노드에 대한 데이터 형식을 제공하며, 읽기 전용이다.

documentElment  : 문서의 루트 요소를 가리키며, 읽고 쓰기가 가능하다.

firstChild : 현재 노드의 첫 번째 자식을 가리키며, 읽기 전용이다.

implementation : 문서에 대한 XMLDOMImplementation 객체로서, 읽기 전용이다.

lastChild : 현재 노드의 마지막 자식 노드로서, 읽기 전용이다.

namespaceURI(*) : Namespace의 URI(Uniform Resource Identifier)를 알려주며, 읽기 전용이다.

nextSibling : 동일 레벨에서 현재 노드의 다음 노드로서, 읽기 전용이다.

nodeName : 구성요소, 속성 또는 엔티티 참조에 대한 검증된 이름, 또는 다른 노드형식에서는

                  문자열을 저장하는 속성으로, 읽기 전용이다.

nodeType : XML DOM노드 형식을 가리키며, 읽기 전용이다.

nodeTypeValue(*) : 노드의 값을 저장하며, 읽고 쓰기가 가능하다.

nodeTypeString(*) : 노드 형식을 문자열로 알려 주며, 읽기 전용이다.

nodeValue : 노드에 관련된 텍스트를 제공하며, 읽고 쓰기가 가능하다.

ondataavailable(*) : ondataavailable 이벤트의 이벤트 처리기로서, 읽고 쓰기가 가능하다.

onreadystatechange(*) : readState 속성의 변경을 처리하는 이벤트 처리기로서,

                                   읽고 쓰기가 가능하다.

onreadystatechange(*) : readyState 속성의 변경을 처리하는 이벤트 처리기로서, 읽고 쓰기가능.

ontransformnode(*) : ontransformnode이벤트에 대한 이벤트 처리기로서, 읽고 쓰기가 가능하다.

ownerDocument :  지정한 노드를 포함하는 문서의 루트를 가리키며, 읽기 전용이다.

parentNode : 부모노드(부모를 가질 수 있는 노드)로서, 읽기 전용이다.

parsed(*) : 지정한 노드와 모든 자손 노드들이 파싱되었다면 참이고, 아니면 거짓이며, 읽기전용

parseError(*) : 가장 최근의 파싱 오류에 관한 정보를 갖는 XMLDOMParseError객체로서

                      읽기 전용

prefix(*)  : Namespace접두어로서,일기 전용이다.

preserveWhiteSpace(*) : 처리 과정에서 여백이 유지되어야 한다면 참, 아니면 거짓을 가지며,

                                   읽고 쓰기가 가능하다.

previousSibling : 지정한 노드와 동일 레벨에서의 이전 노드를 가리키며, 읽기 전용이다.

readyState(*) : XML 문서의 현재 상태를 나타내며, 읽기 전용이다.

resolveExternals(*) : 파싱 할때 외부 정의를 풀어놓을 것인지 지정하며, 읽고 쓰기가 가능하다.

given(*) : 노드를 직접 지정할 것인지 기본값에서 가져올 것인지를 나타내며, 읽기 전용이다.

text(*) : 노드와 하위 트리의 텍스트 내용을 저장하며, 읽고 쓰기가 가능하다.

url(*) : 가장 최근에 로드된 XML문서의 URL(Uniform Resource Locator)을 알려주며, 읽기 전용

validateOnParse(*) : 파서에서 지정한 문서를 검증하도록 할 것인지를 지정하며, 읽고 쓰기 가능

xml(*) : 노드와 모든 자손의 XML 표현을 알려주며, 읽기 전용이다.

Posted by 나비:D
:
Posted by 나비:D
:

   import mx.controls.Alert;
   import mx.events.CloseEvent;

   // show alert
   private function clickButton():void {
     Alert.yesLabel = "예", Alert.noLabel = "아니오";
     Alert.show("예 아니오 냐는?", "", Alert.YES|Alert.NO, this, buttonAlertListener, null);
   }
  
   // alert listener
   private function buttonAlertListener(evt:CloseEvent):void {
    if ( evt.detail == Alert.YES ) {
        Alert.okLabel = "예";
        Alert.show("예 선택했다는");
    } else if ( evt.detail == Alert.NO ) {
        Alert.okLabel = "아니오 선택했소";
        Alert.buttonWidth = 200;
        Alert.show("아니오 선택했다는");
    }
   }


간단 예제 입니다
Alert.yesLabe  Alert.noLabel   Alert.okLabel 등으로 버튼 이름을 한글로 세팅해줄수 있숩니다.


만약 버튼에 할당한 이름이 길다면  Alert.buttonWidth = 200 으로 버튼 길이를 조정하여 글자가 짤리는걸 방지할수 있습니다.


선택에 따라 맞는 행위?를 실행시키려면 Alert.show에 각종 인자를 줍니다


...buttonAlertListener ... 부분이 선택에 따라 실행할 함수 지정 부분


그럼 private function buttonAlertListener(evt:CloseEvent):void 식으로 함수 만들어서
조건에 따라 맞는 행위를 기술해 주시면 된다는.. :)

Posted by 나비:D
:

select를 했으면, insert, update, delete를 사용하는 것을 알아본다.

Apache common DbUtils 사용법 1에서 사용한 방법과 거의 동일한 방법으로 사용을 한다.

먼저 insert를 한번 해보자
insert into testdb(name, addr) values(’Park’ ‘Seoul’)
이런 문장을 가지고 코드를 만들어 보면 아래와 같다.
public int insert()
{
int result = 0;
int index = 0;
String query = “insert into testdb(name, addr) values(:name,:addr)”;
try
{
QueryRunner runner = new QueryRunner();
Vector v = new Vector();
v.add(index++, ‘Park’);
v.add(index++, ‘Seoul’);
result = runner.update(conn, query, v.toArray());
}catch(SQLException ex)
{
log.error(ex);
log.error(”[SQL:]” + query);
throw ex;
}
return result;
}

리턴값이 0보다 크면 정상적으로 insert된다. 여기서 유의해 볼것은 Vector에 입력되는 값인데, 반드시 sql의 구조와 동일한 순서로 되어야 한다. QueryRunner class에서 Vector와 query를 가지고 PreparedStatement를 재구성하기 때문이다.

update, delete는 위에서 query만 변경되면 된다. 간단하지 아니한가??

작성자 : 박남준(criticalbug@gmail.com)

Posted by 나비:D
:

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :