show all in query_posts on category.php?

You could add a url parameter for posts per page. Something like this:

$pppage = ( get_query_var( 'posts_per_page' ) == 'all' ) ? -1 : 45;
query_posts( array(
    'posts_per_page' => $pppage
) );

then you can set your URL with the parameter posts_per_page=all if you want to show all the posts, if it doesn’t find that parameter it will default to 45 posts. You can rewrite this parameter to something like /all/ to show all.