【VB.net/C#】OleDbによるcsvファイルをDataGlidViewに表示するプログラム
開発環境 VisualStudio2017
OS Windows10
フレームワーク .NET Framework 4.7.2
DataGridViewをFormにドッキングさせる方法
ドッキング方法はプロパティでDataGridViewを選択すると
デザインビューでDataGridViewがアクティブになり
右上に三角マークが出るのでこれをクリック
「DataGridViewのタスク」のダイアログが出るので
下にある「親コンテナーにドッキングする」をクリック
するとメニューを除くフォームの大きさになる
命名規則とプロパティ設定値
MenuStrip mnuStrip OpenFileDialog ofdCsv ofdCsv.Filter=Csvファイル|*.csv ToolStripMenuItem CsvOpenToolStripMenuItem CsvOpenToolStripMenuItem.Text=Csvファイルを開く DataGridView dgvCsv DataSet oDS DataTable oTB DataGridViewColumn oColumn OleDb.OleDbConnection oCon OleDb.OleDbCommand() oCommand OleDb.OleDbDataAdapter oDataAdapter
VB.netコード
Public Class frmCsv Private Sub CsvOpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CsvOpenToolStripMenuItem.Click ofdCsv.ShowDialog() End Sub Private Sub ofdCsv_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ofdCsv.FileOk Dim sHeader As String If MsgBox("ヘッダー(1行目)にタイトルを含みますか?", MsgBoxStyle.YesNo, "ヘッダーの有無指定") = MsgBoxResult.Yes Then sHeader = "YES" Else sHeader = "NO" End If Dim oCon As New OleDb.OleDbConnection Dim oCommand As New OleDb.OleDbCommand() Try Dim sFileName As String = ofdCsv.SafeFileName Dim sFilePath As String = Strings.Left(ofdCsv.FileName, Len(ofdCsv.FileName) - Len(sFileName)) Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFilePath & ";Extended Properties='Text;HDR=" & sHeader & ";FMT=CSVDelimited';" Dim oDataSet As New DataSet Dim oDataAdapter As New OleDb.OleDbDataAdapter Dim oDataTable As DataTable = New DataTable oCon.ConnectionString = sConnectionString oCommand.Connection = oCon oCommand.CommandText = "SELECT * FROM [" & sFileName & "]" oDataAdapter.SelectCommand = oCommand oDataSet.Clear() oDataAdapter.Fill(oDataTable) dgvCsv.DataSource = oDataTable Dim oColumn As DataGridViewColumn For Each oColumn In dgvCsv.Columns oColumn.SortMode = DataGridViewColumnSortMode.NotSortable Next Catch ex As Exception Debug.Write(ex.Message) Finally If Not Command() Is Nothing Then oCommand.Dispose() If Not oCon Is Nothing Then oCon.Dispose() End Try End Sub End Class
C#コード
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; //←追加 namespace CsvViewCSharp { public partial class frmCsv : Form { public frmCsv() { InitializeComponent(); } private void CsvOpenFileToolStripMenuItem_Click(object sender, EventArgs e) { ofdCsv.ShowDialog(); } private void ofdCsv_FileOk(object sender, CancelEventArgs e) { bool bIsHeader = MessageBox.Show("ヘッダー(1行目)にタイトルを含みますか?", "ヘッダーの有無指定", MessageBoxButtons.YesNo) == DialogResult.Yes; string sHeader = bIsHeader ? "YES" : "NO"; string sFileName = ofdCsv.SafeFileName; string sFilePath = ofdCsv.FileName.Substring(0, ofdCsv.FileName.Length - sFileName.Length); string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";Extended Properties='Text;HDR=" + sHeader + ";FMT=CSVDelimited';"; OleDbConnection oCon = new OleDbConnection(sConnectionString); OleDbCommand oCommand = new OleDbCommand("SELECT * FROM [" + sFileName + "]", oCon); OleDbDataAdapter oDataAdapter = new OleDbDataAdapter(oCommand); DataSet oDataset = new DataSet(); DataTable oDataTable = new DataTable(); oDataset.Clear(); oDataAdapter.Fill(oDataTable); dgvCsv.DataSource = oDataTable; foreach (DataGridViewColumn oColumn in dgvCsv.Columns) { oColumn.SortMode = DataGridViewColumnSortMode.NotSortable; } if (oCommand != null) { oCommand.Dispose(); } if(oCon != null) { oCon.Dispose(); } } } }
【Java】ログインデータ管理プログラム【csv】
import java.io.File; import java.io.FileWriter; import java.io.FileReader; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.*; import java.util.List; import java.util.Arrays; import java.util.ArrayList; import java.util.LinkedList; class ConsoleLoginEntry{ public static final String csLoginRootPath = ""; public static final String csLoginFilePath = "LoginData.csv"; public static void main(String args[]){ File ofLogin = new File(csLoginRootPath + csLoginFilePath); if (ofLogin.exists()){ //System.out.println("ファイルは存在します"); }else{ System.out.println("ファイルが存在しません"); System.out.println("ファイルを作成しますか?(Y)"); try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String sYesNo = br.readLine(); if(sYesNo.equals("Y")){ if(!ofLogin.createNewFile()){ System.out.println("ファイルを作成できませんでした 終了します"); return; } }else{ System.out.println("終了します"); return; } }catch(IOException e){ System.out.println("Exception :" + e); } } String sID = ""; String sPassWord = ""; boolean bId = false; //IDの入力検査 try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("IDを入力してください ⇒ "); sID = br.readLine(); sID = sID.trim(); if(sID.equals("")){ System.out.println("IDが入力されませんでした 終了します"); return; } if(sID.indexOf(',') > -1){ System.out.println("IDに','(カンマ)文字を使う事はできません"); return; } }catch(IOException e){ System.out.println("Exception :" + e); } //ログイン情報ファイル if (ofLogin.exists()){ try{ BufferedReader brFile = new BufferedReader(new FileReader(ofLogin)); List<String[]> csv = new ArrayList<String[]>(); String str = brFile.readLine(); while (str != null) { csv.add(str.split(",")); str = brFile.readLine(); } brFile.close(); bingo: for(String[] line : csv) { String s[] = line[0].split(","); if (sID.equals(s[0])){ bId = true; break bingo; } } }catch(IOException e){ System.out.println("Exception :" + e); } //パスワードの変更可否 if (bId){ System.out.println("そのIDは既に存在します"); System.out.println("PassWordを変更しますか?(Y) IDを削除しますか?(D)"); try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String sYesNoDelete = br.readLine(); //パスワードのみ変更 if(sYesNoDelete.equals("Y")){ System.out.println("パスワードを入力して下さい"); BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); String sChangePassWord = br2.readLine(); sChangePassWord = sChangePassWord.trim(); if(sChangePassWord.equals("")){ System.out.println("PassWordが入力されませんでした 終了します"); return; } if(sChangePassWord.indexOf(',') > -1){ System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します"); return; } System.out.println("ID=" + sID + " PassWord=" + sChangePassWord); //変更前ログインデータを取得 try{ BufferedReader brFile = new BufferedReader(new FileReader(ofLogin)); List<String[]> csv = new ArrayList<String[]>(); String str = brFile.readLine(); while (str != null) { csv.add(str.split(",")); str = brFile.readLine(); } brFile.close(); //変更するログインデータ作成 LinkedList<String> Newlist = new LinkedList<String>(); for(String[] line : csv) { String s[] = line[0].split(","); if (sID.equals(s[0])){ Newlist.add(sID + "," + sChangePassWord); }else{ Newlist.add(line[0] + "," + line[1]); } } //変更ログインデータファイル作成 try{ File Tempfile = new File(csLoginRootPath + "Temp.csv"); FileWriter filewriter = new FileWriter(Tempfile); for (int i = 0; i < Newlist.size(); i++) { filewriter.write(Newlist.get(i) + "\r\n"); } filewriter.close(); //リネームして正規ログインデータファイルにする ofLogin.delete(); File fNew = new File(csLoginFilePath); Tempfile.renameTo(fNew); }catch(IOException e){ System.out.println(e); } for (int i = 0; i < Newlist.size(); i++) { System.out.println(Newlist.get(i)); } System.out.println("パスワードは変更されました 終了します"); }catch(IOException e){ System.out.println("Exception :" + e); } return; //IDごと削除する }else if(sYesNoDelete.equals("D")){ try{ BufferedReader brFile = new BufferedReader(new FileReader(ofLogin)); List<String[]> csv = new ArrayList<String[]>(); String str = brFile.readLine(); while (str != null) { csv.add(str.split(",")); str = brFile.readLine(); } brFile.close(); //変更するログインデータ作成 LinkedList<String> Newlist = new LinkedList<String>(); for(String[] line : csv) { String s[] = line[0].split(","); if (sID.equals(s[0])){ //Newlist.add(sID + "," + sChangePassWord); }else{ Newlist.add(line[0] + "," + line[1]); } } //変更ログインデータファイル作成 try{ File Tempfile = new File(csLoginRootPath + "Temp.csv"); FileWriter filewriter = new FileWriter(Tempfile); for (int i = 0; i < Newlist.size(); i++) { filewriter.write(Newlist.get(i) + "\r\n"); } filewriter.close(); //リネームして正規ログインデータファイルにする ofLogin.delete(); File fNew = new File(csLoginFilePath); Tempfile.renameTo(fNew); }catch(IOException e){ System.out.println(e); } //ログインデータ一覧を表示(確認用) /* for (int i = 0; i < Newlist.size(); i++) { System.out.println(Newlist.get(i)); } */ System.out.println("正常に削除されました 終了します"); }catch(IOException e){ System.out.println("Exception :" + e); } return; }else{ System.out.println("終了します"); } }catch(IOException e){ System.out.println("Exception :" + e); } return; } } //新規IDのパスワードの入力検査 try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("PassWordを入力してください ⇒ "); sPassWord = br.readLine(); sPassWord = sPassWord.trim(); if(sPassWord.equals("")){ System.out.println("PassWordが入力されませんでした 終了します"); return; } if(sPassWord.indexOf(',') > -1){ System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します"); return; } }catch(IOException e){ System.out.println("Exception :" + e); } //新規IDと新規パスワードを登録 try{ File file = new File(csLoginRootPath + csLoginFilePath); FileWriter filewriter = new FileWriter(file, true); filewriter.write(sID + ',' + sPassWord + "\r\n"); filewriter.close(); System.out.println("登録は完了しました 終了します"); }catch(IOException e){ System.out.println(e); } } }
【Java】JDBCを使ってSQLServerに接続する【JDBC】
JDBCを使ってSQLServerに接続するのに大変苦労したので解決方法を紹介します。
因みに名前付きインスタンスのサーバーに接続しています。
環境はWindows10、Java11、JDBCドライバは7.0です。
https://www.microsoft.com/ja-JP/download/details.aspx?id=57175
先ずソースコードは以下の通り
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ConnectURL { public static void main(String[] args) { try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch(ClassNotFoundException e){ e.printStackTrace(); return; } String connectionUrl = "jdbc:sqlserver://localhost\\MSSQLSERVER2017;databaseName=Login;user=sa;password=パスワード"; try { Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement(); String SQL = "SELECT TOP 10 * FROM LOGIN"; ResultSet rs = stmt.executeQuery(SQL); while (rs.next()) { System.out.println(rs.getString("ID") + " " + rs.getString("PWD")); } rs.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
通常のJava環境ではドライバを認識できなかったのでEclipseでドライバを参照設定すると成功した。
しかし通常のJava環境で実現したかったのでYahoo!知恵袋で質問した所、ドライバをカレントディレクトリに展開してクラスパスをカレントディレクトリに指定せよとの回答。
展開コマンドは以下の通り
>jar -xvf mssql-jdbc-7.2.1.jre11.jar
次にクラスパスを指定してコンパイル
>javac ConnectURL.java -cp .
実行時にはクラスパスは必要ありません
>java ConnectURL
あとでわかったことですがカレントディレクトリに展開しておけばコンパイル時も実行時にもクラスパスは必要ありませんでした。
Eclipseでも同様の事が行われているかは疑問ですがどんな環境構築しているのか興味が湧きますね。しかし通常のJava開発環境で簡単に実装出来ない(ドライバを展開しなければならない)のは問題があると思います。
【JavaScript/JQuery】YTPlayerを使ってWebページの背景に動画を表示する
Webページの背景に動画を表示する方法です。
https://github.com/pupunzi/jquery.mb.YTPlayer
からダウンロードし
Distフォルダ内のj query.mb.YTPlayer.min.jsと
Dist\cssフォルダ内のjquery.mb.YTPlayer.min.css
をhtmlファイルと同じフォルダ内に置きます。
HTMLファイルは次のコードになります。
<!DOCTYPE html> <html> <head> <link href="jquery.mb.YTPlayer.min.css" media="all" rel="stylesheet" type="text/css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="jquery.mb.YTPlayer.min.js"></script> <script> jQuery(function(){ var myPlayer; myPlayer = jQuery("#bgVideo").YTPlayer({}); }); </script> </head> <body> <!--<button onclick="jQuery('#bgVideo').YTPToggleVolume()">Mute/Unmute</button> <button onclick="jQuery('#bgVideo').YTPFullscreen()">Fullscreen</button>--> <input id="videoID" type="text" value="RawC-7fxME0" onfocus="$('#loadOptions').slideDown()"> <button onclick="jQuery('#bgVideo').YTPChangeMovie({videoURL: $('#videoID').val(), mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9})">change video</button> <div class="video" id="bgVideo" data-property="{ videoURL: 'biMO46z_VSY',containment:'body', mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9,opacity:1,addFilters: {grayscale: 50,sepia: 80,opacity: 30}}">jquery.mb.YTPlayer</div> </body> </html>
初期値の動画を変更する場合はコード内のvideoURL: '***********'の*に
YouTubeの動画へのリンクを入力してください。
テキストボックスにYouTubeのリンクを入力して「change video」ボタンを
押すことで動画を変更することができます。
テキストボックスに入力する動画の指定方法は以下の3タイプが指定できます。
https://www.youtube.com/watch?v=V2rifmjZuKQ
http://youtu.be/V2rifmjZuKQ
V2rifmjZuKQ
設定やメソッドなどの詳しい情報は
https://github.com/pupunzi/jquery.mb.YTPlayer/wiki
を見てください。
因みにChromeではファイルを直接開いても再生されますが、
EdgeではWebサイトにアクセスしないと再生されません。
Edgeの場合はIISなどをインストールするなどしてWebサイトから
ファイルを呼び出して確認してください。
補足情報
以前のバージョンでは動画変更するのにはYTPChangeVideoが
使われていましたが新しいバージョンではYTPChangeMovieになりました。
参考デモページ
https://pupunzi.com/mb.components/mb.YTPlayer/demo/demo.html
【Python/Tkinter】写真を点滅させる
【Python/Tkinter】写真を点滅させる
PILをインストールする必要があります
PILで扱える画像の種類はbmp、tiff、gif、jpg、png、tiff、ppm、pgmです
PILがインストールされてない場合はpipでインストールしてください
>pip install Pillow
※参考URL
https://teratail.com/questions/191769
PythonでGUIに画像を表示する
https://water2litter.net/rum/post/python_tkinter_canvas_create_image/
円が動くアニメーションをつくるよ!after()でタイマーを作ろう!
https://python-channel.com/1370.html
ライブラリ:PIL
https://www.lifewithpython.com/2013/09/pil.html
import tkinter as tk from PIL import Image, ImageTk root = tk.Tk() root.geometry('800x560') root.title('IMG') class Photo(object): root = None canvas = None # dt=点滅間隔[msec] def __init__(self,id,dt): self.id= str(id) self.state = 'normal' self.dt = dt Photo.root.after(self.dt, self.blink) def blink(self): if self.state == 'normal': self.state = 'hidden' else: self.state = 'normal' self.canvas.itemconfigure(self.id, state=self.state) self.root.after(self.dt, self.blink) class Photo2(object): root = None canvas = None # dt=点滅間隔[msec] def __init__(self,id,dt): self.id= str(id) self.state = 'normal' self.dt = dt Photo2.root.after(self.dt, self.blink) def blink(self): if self.state == 'normal': self.state = 'hidden' else: self.state = 'normal' self.canvas.itemconfigure(self.id, state=self.state) self.root.after(self.dt, self.blink) rimg1 = Image.open('picture.png') img1 = ImageTk.PhotoImage(rimg1) # 表示するイメージを用意 canvas1 = tk.Canvas( root, # 親要素をメインウィンドウに設定 #scrollregion=tk.W, width=rimg1.width-20, # 幅を設定 height=rimg1.height-20, # 高さを設定 relief=tk.RIDGE, # 枠線を表示 borderwidth=10# 枠線の幅を設定 ) canvas1.create_image( # キャンバス上にイメージを配置 0, # x座標 0, # y座標 image=img1, # 配置するイメージオブジェクトを指定 tag="illust", # タグで引数を追加する。 anchor=tk.NW # 配置の起点となる位置を左上隅に指定 ) canvas1.pack(fill = 'none', side = 'left') Photo.root = root Photo.canvas = canvas1 root.a1 = Photo(1,500) rimg2 = Image.open('picture2.png') img2 = ImageTk.PhotoImage(rimg2) # 表示するイメージを用意 canvas2 = tk.Canvas( root, # 親要素をメインウィンドウに設定 width=rimg2.width-20, # 幅を設定 height=rimg2.height-20, # 高さを設定 relief=tk.RIDGE, # 枠線を表示 borderwidth=10# 枠線の幅を設定 ) canvas2.create_image( # キャンバス上にイメージを配置 0, # x座標 0, # y座標 image=img2, # 配置するイメージオブジェクトを指定 tag="illust2", # タグで引数を追加する。 anchor=tk.NW # 配置の起点となる位置を左上隅に指定 ) canvas2.pack(fill = 'none', side = 'left') Photo2.root = root Photo2.canvas = canvas2 Photo2(1,250) root.mainloop()
【VBS】ドラッグ&ドロップで結合ファイルを作成する
下のコードをテキストファイルにコピーして「MargeTextFile.vbs」とでも名前を付けて保存してください。
このvbsファイルに複数選択したテキストファイルをドラッグ&ドロップするとマージされたファイル「Marge.txt」ができます。
MargeTextFile.vbs
if WScript.Arguments.Count>1 Then Dim FSO Set FSO = WScript.CreateObject("Scripting.FileSystemObject") Dim sMarge For i=0 To WScript.Arguments.Count-1 Dim oArg oArg=WScript.Arguments.Item(i) If FSO.FileExists(oArg) Then Dim oFs Set oFs=FSO.GetFile(oArg).OpenAsTextStream sMarge=sMarge & oFs.ReadAll End If Next Dim oMrg Set oMrg=FSO.OpenTextFile(fso.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt",2,True) oMrg.Write sMarge oMrg.Close End If
UTF-8版
MargeTextFileforUTF8.vbs
if WScript.Arguments.Count>1 Then Dim FSO Set FSO = WScript.CreateObject("Scripting.FileSystemObject") Dim sMarge For i=0 To WScript.Arguments.Count-1 Dim oArg oArg=WScript.Arguments.Item(i) If FSO.FileExists(oArg) Then Dim oFs Set oFs=CreateObject("ADODB.Stream") oFs.Type=2 oFs.Charset="UTF-8" oFs.Open oFs.LoadFromFile oArg sMarge=sMarge & oFs.ReadText oFs.Close End If Next Dim oMrg Set oMrg=CreateObject("ADODB.Stream") oMrg.Type=2 oMrg.Charset="UTF-8" oMrg.Open oMrg.WriteText sMarge oMrg.SaveToFile FSO.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt", 2 oMrg.Close End If
【Java Swing】csvファイルをJTableに表示するプログラム
import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel; public class CsvView extends JFrame { private final static Charset SJIS = Charset.forName("sjis"); private final JTable table = new JTable(); private final JFileChooser filechooser = new JFileChooser(); public CsvView(String title) { setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); filechooser.setDialogTitle("Csvファイルを開く"); filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY); FileFilter filter = new FileNameExtensionFilter("CSVファイル", "csv"); filechooser.addChoosableFileFilter(filter); JMenuItem menuitem1 = new JMenuItem("Csvファイルを開く"); menuitem1.addActionListener(e -> loadCSV(true)); JMenu menu1 = new JMenu("ファイル"); menu1.add(menuitem1); JMenuBar menubar = new JMenuBar(); menubar.add(menu1); setJMenuBar(menubar); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane sp = new JScrollPane(table); add(sp); } private void loadCSV(boolean hasColHeader) { int selected = filechooser.showOpenDialog(this); if (selected != JFileChooser.APPROVE_OPTION) { return; } Path path = filechooser.getSelectedFile().toPath(); int option = JOptionPane.showConfirmDialog(this, "ヘッダー(1行目)にタイトルを含みますか?", "ヘッダーの有無指定", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (option == JOptionPane.YES_OPTION){ hasColHeader=true; }else if (option == JOptionPane.NO_OPTION){ hasColHeader=false; } try (BufferedReader reader = Files.newBufferedReader(path, SJIS)) { String line = reader.readLine(); if (line == null || line.isEmpty()) { table.setModel(new DefaultTableModel()); return; } String[] lineData = line.split(",", -1); DefaultTableModel model; if (hasColHeader) { model = new DefaultTableModel(lineData, 0); } else { model = new DefaultTableModel(0, lineData.length); model.addRow(lineData); } while ((line = reader.readLine()) != null) { model.addRow(line.split(",", -1)); } table.setModel(model); } catch (IOException e) { JOptionPane.showMessageDialog(this, e); } } public static void main(String args[]) { SwingUtilities.invokeLater(() -> { CsvView frame = new CsvView("Csvファイル表示"); frame.setVisible(true); }); } }